{
    "version" : "https://jsonfeed.org/version/1.1",
    "title" : "Incredible Technology, Incredibly Simple",
    "description": "Incredible Technology, Incredibly Simple",
    "home_page_url" : "https://damianflynn.github.io/",
    "feed_url" : "https://damianflynn.github.io/index.feed",
    "icon" : "https://damianflynn.github.io/apple-touch-icon.png",
    "favicon" : "https://damianflynn.github.io/favicon.ico",
    "items" : [
    {
        "title" : "Using AI to Empower Cloud Architecture and Deployments",
        "date_published" : "2024-07-31T00:00:00Z",
        "date_modified" : "2024-07-31T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/using-ai-to-empower-cloud-architecture-and-deployments/",
        "url" : "https://damianflynn.github.io/posts/using-ai-to-empower-cloud-architecture-and-deployments/",
        "summary": "The integration of artificial intelligence (AI) into cloud infrastructure is revolutionizing how we manage and deploy cloud resources. AI, now a pivotal component, optimizes the entire lifecycle of cloud architecture, enhancing tasks like deployment, maintenance, and scaling. This article explores the role of AI in empowering cloud architecture and deployments, especially when combined with Infrastructure as Code (IaC) tools like Bicep and Terraform.",
        "content_html" : "\u003cp\u003eThe integration of artificial intelligence (AI) into cloud infrastructure is revolutionizing the way we manage and deploy cloud resources. \u003cstrong\u003eAI is no longer just a tool for data analysis; it has become a pivotal component in optimizing the entire lifecycle of cloud architecture.\u003c/strong\u003e With AI, tasks like deployment, maintenance, and scaling can be done smarter and faster. This article explores the role of AI in empowering cloud architecture and deployments, highlighting the benefits of integrating AI with Infrastructure as Code (IaC) tools like Bicep and Terraform.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"infrastructure-as-code-iac-tools\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Infrastructure as Code (IaC) Tools\n\u003c/h2\u003e\n\u003cp\u003eInfrastructure as Code (IaC) tools like Bicep and Terraform are game changers in cloud infrastructure management. These tools simplify infrastructure management by enabling version control, reproducibility, and automation of infrastructure deployment. Here’s what makes them stand out:\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"bicep\"\u003e\u003ca href=\"#bicep\" class=\"header-mark\" aria-label=\"Header mark for 'Bicep'\"\u003e\u003c/a\u003e\n    Bicep\n\u003c/h3\u003e\n\n\u003cp\u003eBicep is designed for Azure Resource Manager (ARM) templates, offering a more concise and readable syntax for describing Azure infrastructure. \u003cstrong\u003eIt is ideal for Azure-specific deployments, providing a more streamlined and efficient way to manage Azure resources.\u003c/strong\u003e\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"terraform\"\u003e\u003ca href=\"#terraform\" class=\"header-mark\" aria-label=\"Header mark for 'Terraform'\"\u003e\u003c/a\u003e\n    Terraform\n\u003c/h3\u003e\n\n\u003cp\u003eTerraform supports multiple cloud providers, including AWS, Azure, and Google Cloud Platform, making it ideal for multi-cloud scenarios. It maintains a state file to track the current state of the infrastructure, allowing for efficient updates, drift detection, and collaboration among team members.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"benefits-of-ai-iac-integration\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Benefits of AI-IaC Integration\n\u003c/h2\u003e\n\u003cp\u003eIntegrating AI with IaC tools takes infrastructure management a step further:\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"improved-deployment-efficiency\"\u003e\u003ca href=\"#improved-deployment-efficiency\" class=\"header-mark\" aria-label=\"Header mark for 'Improved Deployment Efficiency'\"\u003e\u003c/a\u003e\n    Improved Deployment Efficiency\n\u003c/h3\u003e\n\n\u003cp\u003e\u003cstrong\u003eAI-assisted deployment ensures that resources are allocated efficiently, reducing the time and effort required for deployment.\u003c/strong\u003e\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"peer-programming\"\u003e\u003ca href=\"#peer-programming\" class=\"header-mark\" aria-label=\"Header mark for 'Peer Programming'\"\u003e\u003c/a\u003e\n    Peer Programming\n\u003c/h3\u003e\n\n\u003cp\u003e\u003cstrong\u003eGenerative AI-assisted tools in the Development Environment enable faster scaffolding of solutions and virtual assistant to support complex configuration and debugging scenarios .\u003c/strong\u003e\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"reduced-downtime\"\u003e\u003ca href=\"#reduced-downtime\" class=\"header-mark\" aria-label=\"Header mark for 'Reduced Downtime'\"\u003e\u003c/a\u003e\n    Reduced Downtime\n\u003c/h3\u003e\n\n\u003cp\u003e\u003cstrong\u003eProactive maintenance enabled by AI reduces downtime, ensuring that resources are always available when needed.\u003c/strong\u003e\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"administrative-workload-reduction\"\u003e\u003ca href=\"#administrative-workload-reduction\" class=\"header-mark\" aria-label=\"Header mark for 'Administrative Workload Reduction'\"\u003e\u003c/a\u003e\n    Administrative Workload Reduction\n\u003c/h3\u003e\n\n\u003cp\u003e\u003cstrong\u003eAI automates repetitive tasks, freeing up administrators to focus on higher-level tasks.\u003c/strong\u003e\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"enhanced-performance-and-cost-savings\"\u003e\u003ca href=\"#enhanced-performance-and-cost-savings\" class=\"header-mark\" aria-label=\"Header mark for 'Enhanced Performance and Cost Savings'\"\u003e\u003c/a\u003e\n    Enhanced Performance and Cost Savings\n\u003c/h3\u003e\n\n\u003cp\u003e\u003cstrong\u003eAI-optimized resource allocation ensures that resources are utilized efficiently, leading to cost savings and improved performance.\u003c/strong\u003e\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"fundamentals\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Fundamentals\n\u003c/h2\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"infrastructure-as-code-tools\"\u003e\u003ca href=\"#infrastructure-as-code-tools\" class=\"header-mark\" aria-label=\"Header mark for 'Infrastructure as Code Tools'\"\u003e\u003c/a\u003e\n    Infrastructure as Code Tools\n\u003c/h3\u003e\n\n\u003cp\u003eUsing Infrastructure as Code (IaC) tools like Bicep and Terraform can make a significant difference in cloud architecture and deployment. These tools enable you to:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eManage Infrastructure as Code:\u003c/strong\u003e IaC tools allow you to manage your infrastructure as code, making it easier to version control and reproduce your infrastructure.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVersion Control and Reproduce:\u003c/strong\u003e IaC tools enable version control and reproducibility of your infrastructure, ensuring consistency and reliability.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eIntegrate AI Technologies:\u003c/strong\u003e IaC tools can integrate AI technologies, enabling proactive maintenance, data analysis, and resource optimization.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"bicep-vs-terraform\"\u003e\u003ca href=\"#bicep-vs-terraform\" class=\"header-mark\" aria-label=\"Header mark for 'Bicep vs. Terraform'\"\u003e\u003c/a\u003e\n    Bicep vs. Terraform\n\u003c/h3\u003e\n\n\u003cp\u003e\u003cstrong\u003eBicep and Terraform are both powerful tools for managing cloud infrastructure.\u003c/strong\u003e Bicep is designed for Azure-specific deployments, while Terraform supports multiple cloud providers.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"ai-integration\"\u003e\u003ca href=\"#ai-integration\" class=\"header-mark\" aria-label=\"Header mark for 'AI Integration'\"\u003e\u003c/a\u003e\n    AI Integration\n\u003c/h3\u003e\n\n\u003cp\u003eIntegrating AI into your cloud infrastructure provides numerous benefits:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eData Analysis:\u003c/strong\u003e AI analyzes vast amounts of data to identify patterns and anomalies, enabling proactive maintenance and resource optimization.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eProactive Maintenance:\u003c/strong\u003e AI-assisted proactive maintenance reduces downtime, ensuring that resources are always available when needed.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eResource Optimization:\u003c/strong\u003e AI optimizes resource allocation, ensuring that resources are utilized efficiently and cost-effectively.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"cicd-tools\"\u003e\u003ca href=\"#cicd-tools\" class=\"header-mark\" aria-label=\"Header mark for 'CI/CD Tools'\"\u003e\u003c/a\u003e\n    CI/CD Tools\n\u003c/h3\u003e\n\n\u003cp\u003eCI/CD tools are essential for automating testing, validation, and deployment. \u003cstrong\u003eThey speed up deployment and ensure consistency and reliability.\u003c/strong\u003e\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"advanced-aspects\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Advanced Aspects\n\u003c/h2\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"efficient-resource-utilization\"\u003e\u003ca href=\"#efficient-resource-utilization\" class=\"header-mark\" aria-label=\"Header mark for 'Efficient Resource Utilization'\"\u003e\u003c/a\u003e\n    Efficient Resource Utilization\n\u003c/h3\u003e\n\n\u003cp\u003eAI-assisted resource allocation ensures that resources are utilized efficiently, leading to cost savings and improved performance.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"practical-examples\"\u003e\u003ca href=\"#practical-examples\" class=\"header-mark\" aria-label=\"Header mark for 'Practical Examples'\"\u003e\u003c/a\u003e\n    Practical Examples\n\u003c/h3\u003e\n\n\u003cp\u003e\u003cstrong\u003eReal-world applications demonstrate the tangible benefits of AI integration in cloud infrastructure.\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eAzure Cloud\u0026rsquo;s AI Infrastructure:\u003c/strong\u003e Google Cloud\u0026rsquo;s AI Infrastructure is designed for scalable, high-performance, and cost-effective infrastructure.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"addressing-common-misconceptions\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Addressing Common Misconceptions\n\u003c/h2\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"ai-and-human-administrators\"\u003e\u003ca href=\"#ai-and-human-administrators\" class=\"header-mark\" aria-label=\"Header mark for 'AI and Human Administrators'\"\u003e\u003c/a\u003e\n    AI and Human Administrators\n\u003c/h3\u003e\n\n\u003cp\u003e\u003cstrong\u003eMany think AI might replace human administrators. That’s not true.\u003c/strong\u003e AI works to augment human skills, automating repetitive tasks and freeing up administrators for higher-level tasks.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eAI Manages Repetitive Tasks:\u003c/strong\u003e AI automates repetitive tasks, freeing up administrators to focus on higher-level tasks.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBoosting Productivity:\u003c/strong\u003e AI-assisted infrastructure management boosts productivity, enabling administrators to focus on more strategic tasks.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"latest-developments\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Latest Developments\n\u003c/h2\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"recent-advancements\"\u003e\u003ca href=\"#recent-advancements\" class=\"header-mark\" aria-label=\"Header mark for 'Recent Advancements'\"\u003e\u003c/a\u003e\n    Recent Advancements\n\u003c/h3\u003e\n\n\u003cp\u003eHere\u0026rsquo;s a look at some of the latest game-changers in AI and cloud infrastructure:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGoogle Cloud\u0026rsquo;s AI Infrastructure:\u003c/strong\u003e Google Cloud\u0026rsquo;s AI Infrastructure is built on Jupiter data center network, providing a scalable and high-performance infrastructure.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eOpenXLA Project:\u003c/strong\u003e The OpenXLA project accelerates AI infrastructure and application development, enabling faster and more efficient AI deployment.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"conclusion\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Conclusion\n\u003c/h2\u003e\n\u003cp\u003eExcited about what\u0026rsquo;s next in AI and cloud infrastructure? \u003cstrong\u003eStaying updated with the latest trends is crucial.\u003c/strong\u003e AI is transforming cloud management, and it’s only getting better. Ready to optimize your cloud infrastructure? \u003cstrong\u003eAI has tons of potential. Dive into using AI-assisted tools today!\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eBy exploring AI, you can:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEnhance Deployment Efficiency:\u003c/strong\u003e AI-assisted deployment ensures that resources are allocated efficiently, reducing the time and effort required for deployment.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCut Downtime:\u003c/strong\u003e Proactive maintenance enabled by AI reduces downtime, ensuring that resources are always available when needed.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHarness AI for Better Cloud Lifecycle Management:\u003c/strong\u003e AI optimizes resource allocation, ensuring that resources are utilized efficiently and cost-effectively.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eMake your next big move with AI in cloud infrastructure.\u003c/p\u003e\n",
        "language": "en"
    }
    {
        "title" : "Bicep - Tags as Parameters",
        "date_published" : "2021-07-23T00:00:00Z",
        "date_modified" : "2021-07-23T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/bicep-tags-as-parameters/",
        "url" : "https://damianflynn.github.io/posts/bicep-tags-as-parameters/",
        "summary": "Deploying infrastructure ARM Templates to Azure, but using Tags and their respective value as the parameter configuration settings\nIn a post earlier, we look at using arm to lookup the value of tags\u0026rsquo; at both the Subscription and Resource Level.\nWith Bicep this is much easier to understand. This is the same lab configuration as in the original post, but this time to code should be a lot more readable.\n",
        "content_html" : "\u003cp\u003e\u003cstrong\u003eDeploying infrastructure ARM Templates to Azure, but using Tags and their respective value as the parameter configuration settings\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eIn a post earlier, we look at using arm to lookup the value of tags\u0026rsquo; at both the Subscription and Resource Level.\u003c/p\u003e\n\u003cp\u003eWith Bicep this is much easier to understand. This is the same lab configuration as in the original post, but this time to code should be a lot more readable.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e//\u003c/span\u003e \u003cspan class=\"n\"\u003eSample\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003elookup\u003c/span\u003e \u003cspan class=\"n\"\u003etag\u003c/span\u003e \u003cspan class=\"n\"\u003evalues\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e//\u003c/span\u003e \u003cspan class=\"n\"\u003eBoth\u003c/span\u003e \u003cspan class=\"n\"\u003eSubscription\u003c/span\u003e \u003cspan class=\"n\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003eResource\u003c/span\u003e \u003cspan class=\"n\"\u003eLevel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e@description\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;The resource ID of the resource we wish to look up a tag from.\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eparam\u003c/span\u003e \u003cspan class=\"n\"\u003esourceResourceId\u003c/span\u003e \u003cspan class=\"n\"\u003estring\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;/subscriptions/547d54ea-411b-459e-b6f8-b3cc5e84c535/resourceGroups/p-vm/providers/Microsoft.Compute/virtualMachines/p-vm001\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e//\u003c/span\u003e \u003cspan class=\"n\"\u003eVariables\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003ereference\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003eTags\u003c/span\u003e \u003cspan class=\"n\"\u003eResource\u003c/span\u003e \u003cspan class=\"n\"\u003eProviders\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e//\u003c/span\u003e \u003cspan class=\"n\"\u003eSubscription\u003c/span\u003e \u003cspan class=\"n\"\u003eTags\u003c/span\u003e \u003cspan class=\"n\"\u003eResource\u003c/span\u003e \u003cspan class=\"n\"\u003eProvider\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evar\u003c/span\u003e \u003cspan class=\"n\"\u003ereferenceSubscriptionTagsResourceId\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Resources/tags/default\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e//\u003c/span\u003e \u003cspan class=\"n\"\u003eResource\u003c/span\u003e \u003cspan class=\"n\"\u003eTags\u003c/span\u003e \u003cspan class=\"n\"\u003eResource\u003c/span\u003e \u003cspan class=\"n\"\u003eProvider\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evar\u003c/span\u003e \u003cspan class=\"n\"\u003ereferenceResourceTagsResourceId\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;${sourceResourceId}/providers/Microsoft.Resources/tags/default\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003evar\u003c/span\u003e \u003cspan class=\"n\"\u003ereferenceTagsApi\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;2020-06-01\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e//\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e//\u003c/span\u003e \u003cspan class=\"n\"\u003eLookup\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003etags\u003c/span\u003e \u003cspan class=\"n\"\u003eand\u003c/span\u003e \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003evalue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e//\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e//\u003c/span\u003e \u003cspan class=\"n\"\u003eSubscription\u003c/span\u003e \u003cspan class=\"n\"\u003eTags\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eoutput\u003c/span\u003e \u003cspan class=\"n\"\u003esubscriptionRecoveryVaultRGTag\u003c/span\u003e \u003cspan class=\"n\"\u003estring\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ereference\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ereferenceSubscriptionTagsResourceId\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ereferenceTagsApi\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"py\"\u003etags\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003erecoveryVaultRG\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eoutput\u003c/span\u003e \u003cspan class=\"n\"\u003esubscriptionRecoveryVaultTag\u003c/span\u003e \u003cspan class=\"n\"\u003estring\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ereference\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ereferenceSubscriptionTagsResourceId\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ereferenceTagsApi\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"py\"\u003etags\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003erecoveryVault\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e//\u003c/span\u003e \u003cspan class=\"n\"\u003eResource\u003c/span\u003e \u003cspan class=\"n\"\u003eTags\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eoutput\u003c/span\u003e \u003cspan class=\"n\"\u003eresourceRecoveryPolicyTag\u003c/span\u003e \u003cspan class=\"n\"\u003estring\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ereference\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ereferenceResourceTagsResourceId\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ereferenceTagsApi\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"py\"\u003etags\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003erecoveryPolicy\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e//\u003c/span\u003e \u003cspan class=\"n\"\u003eConcatanation\u003c/span\u003e \u003cspan class=\"n\"\u003eof\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003eoutputs\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003ebuild\u003c/span\u003e \u003cspan class=\"n\"\u003eResource\u003c/span\u003e \u003cspan class=\"n\"\u003eIds\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eoutput\u003c/span\u003e \u003cspan class=\"n\"\u003erecoveryVaultId\u003c/span\u003e \u003cspan class=\"n\"\u003estring\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eresourceId\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esubscription\u003c/span\u003e\u003cspan class=\"p\"\u003e().\u003c/span\u003e\u003cspan class=\"n\"\u003esubscriptionId\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ereference\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ereferenceSubscriptionTagsResourceId\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ereferenceTagsApi\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"py\"\u003etags\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erecoveryVaultRG\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;Microsoft.RecoveryServices/vaults\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ereference\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ereferenceSubscriptionTagsResourceId\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ereferenceTagsApi\u003c/span\u003e\u003cspan class=\"p\"\u003e).\u003c/span\u003e\u003cspan class=\"py\"\u003etags\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erecoveryVault\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eoutput\u003c/span\u003e \u003cspan class=\"n\"\u003erecoveryPolicyId\u003c/span\u003e \u003cspan class=\"n\"\u003estring\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;${resourceId(subscription().subscriptionId, reference(referenceSubscriptionTagsResourceId, referenceTagsApi).tags.recoveryVaultRG, \u0026#39;\u003c/span\u003e\u003cspan class=\"n\"\u003eMicrosoft\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eRecoveryServices\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003evaults\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;, reference(referenceSubscriptionTagsResourceId, referenceTagsApi).tags.recoveryVault)}/backupPolicies/${reference(referenceResourceTagsResourceId, referenceTagsApi).tags.recoveryPolicy}\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n",
        "language": "en"
    },
    {
        "title" : "Streaming Vinyl On Sonos",
        "date_published" : "2021-02-21T00:00:00Z",
        "date_modified" : "2021-02-21T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/streaming-vinyl-on-sonos/",
        "url" : "https://damianflynn.github.io/posts/streaming-vinyl-on-sonos/",
        "summary": "Mixup some Vyinl Oldies, a little Ice to cast, and a PI for some energy, and your ready to go\nA little known trivia - I was once a Disc Jokey, and spent a lot of my youth behind the decks, in clubs around the West Of Ireland. Today, I still am the proud owner of a very large collection of Vynil and CD music, which of course deserves to get a second life with my digital streaming audio system powered by Sonos\n",
        "content_html" : "\u003cp\u003e\u003cstrong\u003eMixup some Vyinl Oldies, a little Ice to cast, and a PI for some energy, and your ready to go\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eA little known trivia - I was once a Disc Jokey, and spent a lot of my youth behind the decks, in clubs around the West Of Ireland. Today, I still am the proud owner of a very large collection of Vynil and CD music, which of course deserves to get a second life with my digital streaming audio system powered by Sonos\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"usb-turntable-streamer\"\u003e\u003ca href=\"#usb-turntable-streamer\" class=\"header-mark\" aria-label=\"Header mark for 'USB Turntable Streamer'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"usb-turntable-streamer\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eUSB Turntable Streamer\u003c/strong\u003e\n\u003c/h1\u003e\n\u003cp\u003eI own a really nice turntable which is modeled on the Legendary Technical SL1200 MK3, which I am so well aquatinted with, including the awesome Citronix DJ Console which was home to 2 of these beauties in so many clubs way back when…\u003c/p\u003e\n\u003cp\u003eMy \u003ca href=\"http://amzn.to/2drytFC\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eAudio-Technica AT-LP120-USB\u003c/a\u003e device is the focus of todays IoT challange, I will be using a Raspberry PI3, to stream audio from one of these turntables with USB audio codec output.\u003c/p\u003e\n\u003cp\u003eIf your in the market, these are also workable options for this exercise\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://amzn.to/2dSVrGz\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eAudio-Technica AT-LP60-USB\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://amzn.to/2e3piLt\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eION Audio Classic LP | 3-Speed USB\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://amzn.to/2dW2Xm7\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eSony PSLX300USB\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"enable-ssh-before-booting\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eEnable SSH before booting\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eBecause we are going to use the Raspberry Pi headless (without a display) and without keyboard attached, we need a way to control the device. Luckily we can enable SSH by adding an \u003cem\u003eempty file\u003c/em\u003e called \u003ccode\u003essh\u003c/code\u003e to the root of the SD card. This will enable SSH for us automatically. If you are using the Ethernet port on the Raspberry Pi, networking and SSH should work out of the box with DHCP.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"update-to-current-os\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eUpdate to Current OS\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eUpdate your Raspbian install:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get update\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"connect-the-usb-turntable-to-the-raspberry-pi\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eConnect the USB Turntable to the Raspberry Pi\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eNow, connect the turntable to the Raspberry Pi, using USB. You can use the command \u003ccode\u003earecord -l\u003c/code\u003e to check if your device has been detected. Mine shows this:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epi@raspberrypi:~ $ arecord -l\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e**** List of CAPTURE Hardware Devices ****\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecard 1: CODEC \u003cspan class=\"o\"\u003e[\u003c/span\u003eUSB AUDIO  CODEC\u003cspan class=\"o\"\u003e]\u003c/span\u003e, device 0: USB Audio \u003cspan class=\"o\"\u003e[\u003c/span\u003eUSB Audio\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  Subdevices: 0/1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  Subdevice \u003cspan class=\"c1\"\u003e#0: subdevice #0\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eMake a note of the card number, \u003cem\u003e1 in my case\u003c/em\u003e. This is probably the same for you, but if it differs, you may need to remember it and change accordingly in the following steps.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"fix-volume-issues\"\u003e\u003ca href=\"#fix-volume-issues\" class=\"header-mark\" aria-label=\"Header mark for 'Fix volume issues'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eFix volume issues\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eAs most USB turntables do not have hardware volume control, and the input volume is stuck on roughly half of what it should be, we need to add a software volume control. Create the file \u003ccode\u003e/etc/asound.conf\u003c/code\u003e and edit it to add the following contents:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003epcm.dmic_hw\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003etype\u003c/span\u003e \u003cspan class=\"err\"\u003ehw\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003ecard\u003c/span\u003e \u003cspan class=\"err\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003echannels\u003c/span\u003e \u003cspan class=\"err\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003eformat\u003c/span\u003e \u003cspan class=\"err\"\u003eS16_LE\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003epcm.dmic_mm\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003etype\u003c/span\u003e \u003cspan class=\"err\"\u003emmap_emul\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003eslave.pcm\u003c/span\u003e \u003cspan class=\"err\"\u003edmic_hw\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003epcm.dmic_sv\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003etype\u003c/span\u003e \u003cspan class=\"err\"\u003esoftvol\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003eslave.pcm\u003c/span\u003e \u003cspan class=\"err\"\u003edmic_hw\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003econtrol\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"err\"\u003ename\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;Boost Capture Volume\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"err\"\u003ecard\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003emin_dB\u003c/span\u003e \u003cspan class=\"mf\"\u003e-5.0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"err\"\u003emax_dB\u003c/span\u003e \u003cspan class=\"mf\"\u003e20.0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eNext, run this command to refresh the alsa state and also show VU Meters to test the input volume:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-4\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003earecord -D dmic_sv -r \u003cspan class=\"m\"\u003e44100\u003c/span\u003e -f S16_LE -c \u003cspan class=\"m\"\u003e2\u003c/span\u003e --vumeter\u003cspan class=\"o\"\u003e=\u003c/span\u003estereo /dev/null\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAs you might notice, the volume is way too low. You can use \u003ccode\u003ealsamixer\u003c/code\u003e to change the volume. Press \u003ccode\u003eF6\u003c/code\u003e to select the USB Turntable device, and press \u003ccode\u003eTAB\u003c/code\u003e until you see the boost slider.\u003c/p\u003e\n\u003cp\u003eI have it set to 65 on my setup, but you might try out. Make sure you are not turning it up too high, or your sound quality might degrade due to clipping.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"icecast2\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eicecast2\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eNow, to stream we will use the \u003ccode\u003eicecast2\u003c/code\u003e package, which of course needs to be deployed to our Pi.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-5\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get install icecast2\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"configure-icecast2\"\u003e\u003ca href=\"#configure-icecast2\" class=\"header-mark\" aria-label=\"Header mark for 'Configure icecast2'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eConfigure icecast2\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eNext, we will edit \u003ccode\u003e/etc/icecast2/icecast.xml\u003c/code\u003e, which is the casting servers settings, to provide a name for the stream, and some credential’s to protect the stream.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003exml\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-6\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003e\u0026lt;icecast\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;location\u0026gt;\u003c/span\u003eRecord Room\u003cspan class=\"nt\"\u003e\u0026lt;/location\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;admin\u0026gt;\u003c/span\u003eicemaster@localhost\u003cspan class=\"nt\"\u003e\u0026lt;/admin\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;limits\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;clients\u0026gt;\u003c/span\u003e100\u003cspan class=\"nt\"\u003e\u0026lt;/clients\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;sources\u0026gt;\u003c/span\u003e2\u003cspan class=\"nt\"\u003e\u0026lt;/sources\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;queue-size\u0026gt;\u003c/span\u003e524288\u003cspan class=\"nt\"\u003e\u0026lt;/queue-size\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;client-timeout\u0026gt;\u003c/span\u003e30\u003cspan class=\"nt\"\u003e\u0026lt;/client-timeout\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;header-timeout\u0026gt;\u003c/span\u003e15\u003cspan class=\"nt\"\u003e\u0026lt;/header-timeout\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;source-timeout\u0026gt;\u003c/span\u003e10\u003cspan class=\"nt\"\u003e\u0026lt;/source-timeout\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;burst-on-connect\u0026gt;\u003c/span\u003e0\u003cspan class=\"nt\"\u003e\u0026lt;/burst-on-connect\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;burst-size\u0026gt;\u003c/span\u003e65535\u003cspan class=\"nt\"\u003e\u0026lt;/burst-size\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;/limits\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;authentication\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;source-password\u0026gt;\u003c/span\u003evynil\u003cspan class=\"nt\"\u003e\u0026lt;/source-password\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;relay-password\u0026gt;\u003c/span\u003evynil\u003cspan class=\"nt\"\u003e\u0026lt;/relay-password\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c\"\u003e\u0026lt;!-- Admin logs in with the username given below --\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;admin-user\u0026gt;\u003c/span\u003eadmin\u003cspan class=\"nt\"\u003e\u0026lt;/admin-user\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;admin-password\u0026gt;\u003c/span\u003evynil\u003cspan class=\"nt\"\u003e\u0026lt;/admin-password\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;/authentication\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;hostname\u0026gt;\u003c/span\u003elocalhost\u003cspan class=\"nt\"\u003e\u0026lt;/hostname\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;listen-socket\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;port\u0026gt;\u003c/span\u003e80\u003cspan class=\"nt\"\u003e\u0026lt;/port\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;/listen-socket\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;http-headers\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;header\u003c/span\u003e \u003cspan class=\"na\"\u003ename=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Access-Control-Allow-Origin\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003evalue=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;*\u0026#34;\u003c/span\u003e \u003cspan class=\"nt\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;/http-headers\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;fileserve\u0026gt;\u003c/span\u003e1\u003cspan class=\"nt\"\u003e\u0026lt;/fileserve\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;paths\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;basedir\u0026gt;\u003c/span\u003e/usr/share/icecast2\u003cspan class=\"nt\"\u003e\u0026lt;/basedir\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;logdir\u0026gt;\u003c/span\u003e/var/log/icecast2\u003cspan class=\"nt\"\u003e\u0026lt;/logdir\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;webroot\u0026gt;\u003c/span\u003e/usr/share/icecast2/web\u003cspan class=\"nt\"\u003e\u0026lt;/webroot\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;adminroot\u0026gt;\u003c/span\u003e/usr/share/icecast2/admin\u003cspan class=\"nt\"\u003e\u0026lt;/adminroot\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;alias\u003c/span\u003e \u003cspan class=\"na\"\u003esource=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003edestination=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/status.xsl\u0026#34;\u003c/span\u003e\u003cspan class=\"nt\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c\"\u003e\u0026lt;!-- The certificate file needs to contain both public and private part.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e             Both should be PEM encoded.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e        \u0026lt;ssl-certificate\u0026gt;/usr/share/icecast2/icecast.pem\u0026lt;/ssl-certificate\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e        --\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;/paths\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;logging\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;accesslog\u0026gt;\u003c/span\u003eaccess.log\u003cspan class=\"nt\"\u003e\u0026lt;/accesslog\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;errorlog\u0026gt;\u003c/span\u003eerror.log\u003cspan class=\"nt\"\u003e\u0026lt;/errorlog\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;loglevel\u0026gt;\u003c/span\u003e3\u003cspan class=\"nt\"\u003e\u0026lt;/loglevel\u0026gt;\u003c/span\u003e \u003cspan class=\"c\"\u003e\u0026lt;!-- 4 Debug, 3 Info, 2 Warn, 1 Error --\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;logsize\u0026gt;\u003c/span\u003e10000\u003cspan class=\"nt\"\u003e\u0026lt;/logsize\u0026gt;\u003c/span\u003e \u003cspan class=\"c\"\u003e\u0026lt;!-- Max size of a logfile --\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;/logging\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;security\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026lt;chroot\u0026gt;\u003c/span\u003e0\u003cspan class=\"nt\"\u003e\u0026lt;/chroot\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026lt;/security\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003e\u0026lt;/icecast\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"starting-icecast2\"\u003e\u003ca href=\"#starting-icecast2\" class=\"header-mark\" aria-label=\"Header mark for 'Starting IceCast2'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eStarting IceCast2\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eWe are going to start the casting server, but we will bing to TCP 80, which requires that we allow this to happen, but following these simple steps.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-7\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo setcap \u003cspan class=\"s1\"\u003e\u0026#39;cap_net_bind_service=+ep\u0026#39;\u003c/span\u003e \u003cspan class=\"sb\"\u003e`\u003c/span\u003ewhich icecast2\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eupdate-rc.d icecast2 defaults\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl status icecast2.service\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"icecast2-admin\"\u003e\u003ca href=\"#icecast2-admin\" class=\"header-mark\" aria-label=\"Header mark for 'Icecast2 admin'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eIcecast2 admin\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eNow, we should have the casting server online, and working, It will be listening at \u003ca href=\"http://pi-ipaddress/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehttp:\\Pi\u003c/a\u003e \u003cem\u003e(replacing PI with the IP or name you assigned to the device)\u003c/em\u003e and is good for checking the status of connected clients, authenticate with the account \u003cem\u003eadmin\u003c/em\u003e and password \u003cem\u003evynil\u003c/em\u003e\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"darkice\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eDarkice\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eNow we need to link the USB audio source, to our Icecast server, and to make this work, we will use another grate package called \u003ccode\u003edarkice\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eThen install a bunch of needed packages:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-8\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get -y install darkice\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"configure-darkice\"\u003e\u003ca href=\"#configure-darkice\" class=\"header-mark\" aria-label=\"Header mark for 'Configure Darkice'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eConfigure Darkice\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eThis time, we will update the DarkIce configuration file located at \u003ccode\u003e/etc/darkice.cfg\u003c/code\u003e so that it is aware of where the USB turntable is connected to our system (remember the pointer earlier), and how to connect with our Icecast server.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eyaml\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-9\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# this section describes general aspects of the live streaming session\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"l\"\u003egeneral]\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003eduration        = 0        \u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"c\"\u003e# duration of encoding, in seconds. 0 means forever\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003ebufferSecs      = 1        \u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"c\"\u003e# size of internal slip buffer, in seconds\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003ereconnect       = yes      \u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"c\"\u003e# reconnect to the server(s) if disconnected\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003erealtime        = yes      \u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"c\"\u003e# run the encoder with POSIX realtime priority\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003ertprio          = 3        \u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"c\"\u003e# scheduling priority for the realtime threads\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"c\"\u003e# this section describes the audio input that will be streamed\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"l\"\u003einput]\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003edevice          = hw:1,0   \u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"c\"\u003e# OSS DSP soundcard device for the audio input\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003esampleRate      = 44100    \u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"c\"\u003e# other settings have crackling audo, esp. 44100\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003ebitsPerSample   = 16       \u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"c\"\u003e# bits per sample. try 16\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003echannel         = 2        \u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"c\"\u003e# channels. 1 = mono, 2 = stereo\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"c\"\u003e# this section describes a streaming connection to an IceCast2 server\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"c\"\u003e# there may be up to 8 of these sections, named [icecast2-0] ... [icecast2-7]\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"c\"\u003e# these can be mixed with [icecast-x] and [shoutcast-x] sections\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"l\"\u003eicecast2-0]\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003ebitrateMode     = cbr\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003eformat          = mp3\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003ebitrate         = 320\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003eserver          = localhost\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003eport            = 80\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003epassword        = vynil\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003emountPoint      = listen.mp3\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003ename            = Turntable\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003edescription     = Audio-Technica AT-LP120 Turntable\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003eurl             = http://turntable\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003egenre           = vinyl\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003epublic          = no\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003elocalDumpFile   = recording.m4a\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"darkice-init-script\"\u003e\u003ca href=\"#darkice-init-script\" class=\"header-mark\" aria-label=\"Header mark for 'Darkice Init Script'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eDarkice Init Script\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eOk, we now need to create a simple script which will autostart this darkice service each time the Pi is rebooted, so that we can set and forget about this little IoT solution.\u003c/p\u003e\n\u003cp\u003eStart by creating a new \u003cem\u003einit.d\u003c/em\u003e file called \u003ccode\u003e/etc/init.d/darkice\u003c/code\u003e and then populating the file with the following script\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-10\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/sh\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e\u003c/span\u003e\u003cspan class=\"c1\"\u003e#\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Copyright (c) 2007 Javier Fernandez-Sanguino \u0026lt;jfs@debian.org\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Copyright (c) 2009 Jochen Friedrich \u0026lt;jochen@scram.de\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# This is free software; you may redistribute it and/or modify\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# it under the terms of the GNU General Public License as\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# published by the Free Software Foundation; either version 2,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# or (at your option) any later version.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# This is distributed in the hope that it will be useful, but\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# WITHOUT ANY WARRANTY; without even the implied warranty of\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# GNU General Public License for more details.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# You should have received a copy of the GNU General Public License with\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# the Debian operating system, in /usr/share/common-licenses/GPL;  if\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# not, write to the Free Software Foundation, Inc., 59 Temple Place,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Suite 330, Boston, MA 02111-1307 USA\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e### BEGIN INIT INFO\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Provides:          darkice\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Required-Start:    $network $local_fs $remote_fs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Required-Stop:     $network $local_fs $remote_fs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Should-Start:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Should-Stop:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Default-Start:     2 3 4 5\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Default-Stop:      0 1 6\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Short-Description: Live audio streamer\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Description:       DarkIce is an IceCast, IceCast2 and ShoutCast\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#                    live audio streamer.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e### END INIT INFO\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ePATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eNAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003edarkice\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eDAEMON\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/usr/bin/\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eDESC\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Live audio streamer\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eLOGDIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/var/log\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eUSER\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003enobody\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eGROUP\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003enogroup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eLOGFILE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$LOGDIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e.log\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ePIDFILE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/var/run/\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e.pid\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003etest\u003c/span\u003e -x \u003cspan class=\"nv\"\u003e$DAEMON\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e. /lib/lsb/init-functions\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Default options, these can be overriden by the information\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# at /etc/default/$NAME\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eDAEMON_OPTS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e          \u003cspan class=\"c1\"\u003e# Additional options given to the server\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eDIETIME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e2\u003c/span\u003e               \u003cspan class=\"c1\"\u003e# Time to wait for the server to die, in seconds\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"c1\"\u003e# If this value is set too low you might not\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"c1\"\u003e# let some servers to die gracefully and\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"c1\"\u003e# \u0026#39;restart\u0026#39; will not work\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Include defaults if available\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -f /etc/default/\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t. /etc/default/\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Use this if you want the user to explicitly set \u0026#39;RUN\u0026#39; in\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# /etc/default/\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;x\u003c/span\u003e\u003cspan class=\"nv\"\u003e$RUN\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;xyes\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e -e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erunning_pid\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Check if a given process pid\u0026#39;s cmdline matches a given name\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003epid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e[\u003c/span\u003e -z \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$pid\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e[\u003c/span\u003e ! -d /proc/\u003cspan class=\"nv\"\u003e$pid\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e  \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003ecmd\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003ecat /proc/\u003cspan class=\"nv\"\u003e$pid\u003c/span\u003e/cmdline \u003cspan class=\"p\"\u003e|\u003c/span\u003e tr \u003cspan class=\"s2\"\u003e\u0026#34;\\000\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\\n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e|\u003c/span\u003ehead -n \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003ecut -d : -f 1\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# Is this the expected server\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$cmd\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$name\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e  \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erunning\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Check if the process is running looking at /proc\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# (works for all users)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    sleep \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# No pidfile, probably no daemon present\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e[\u003c/span\u003e ! -f \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PIDFILE\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003epid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003ecat \u003cspan class=\"nv\"\u003e$PIDFILE\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    running_pid \u003cspan class=\"nv\"\u003e$pid\u003c/span\u003e \u003cspan class=\"nv\"\u003e$DAEMON\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003estart_server\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Start the process using the wrapper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        start-stop-daemon --start --quiet --make-pidfile --pidfile \u003cspan class=\"nv\"\u003e$PIDFILE\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e            --background --chuid \u003cspan class=\"nv\"\u003e$USER\u003c/span\u003e:\u003cspan class=\"nv\"\u003e$GROUP\u003c/span\u003e --no-close \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e\t    --exec \u003cspan class=\"nv\"\u003e$DAEMON\u003c/span\u003e -- \u003cspan class=\"nv\"\u003e$DAEMON_OPTS\u003c/span\u003e \u0026gt;\u0026gt; \u003cspan class=\"nv\"\u003e$LOGFILE\u003c/span\u003e 2\u0026gt;\u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eerrcode\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$?\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"nv\"\u003e$errcode\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003estop_server\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Stop the process using the wrapper\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        start-stop-daemon --stop --quiet --remove-pidfile --pidfile \u003cspan class=\"nv\"\u003e$PIDFILE\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e            --exec \u003cspan class=\"nv\"\u003e$DAEMON\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eerrcode\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$?\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"nv\"\u003e$errcode\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eforce_stop\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Force the process to die killing it manually\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"o\"\u003e[\u003c/span\u003e ! -e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PIDFILE\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"k\"\u003eif\u003c/span\u003e running \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nb\"\u003ekill\u003c/span\u003e -15 \u003cspan class=\"nv\"\u003e$pid\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"c1\"\u003e# Is it really dead?\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\tsleep \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$DIETIME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003es\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"k\"\u003eif\u003c/span\u003e running \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003ekill\u003c/span\u003e -9 \u003cspan class=\"nv\"\u003e$pid\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\tsleep \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$DIETIME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003es\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"k\"\u003eif\u003c/span\u003e running \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Cannot kill \u003c/span\u003e\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e (pid=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$pid\u003c/span\u003e\u003cspan class=\"s2\"\u003e)!\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\trm -f \u003cspan class=\"nv\"\u003e$PIDFILE\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  start\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tlog_daemon_msg \u003cspan class=\"s2\"\u003e\u0026#34;Starting \u003c/span\u003e\u003cspan class=\"nv\"\u003e$DESC\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Check if it\u0026#39;s running first\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e running \u003cspan class=\"p\"\u003e;\u003c/span\u003e  \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            log_progress_msg \u003cspan class=\"s2\"\u003e\u0026#34;apparently already running\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            log_end_msg \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e start_server \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e running \u003cspan class=\"p\"\u003e;\u003c/span\u003e  \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"c1\"\u003e# It\u0026#39;s ok, the server started and is running\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            log_end_msg \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"c1\"\u003e# Either we could not start it or it is not running\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"c1\"\u003e# after we did\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"c1\"\u003e# NOTE: Some servers might die some time after they start,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"c1\"\u003e# this code does not try to detect this and might give\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"c1\"\u003e# a false positive (use \u0026#39;status\u0026#39; for that)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            log_end_msg \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  stop\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        log_daemon_msg \u003cspan class=\"s2\"\u003e\u0026#34;Stopping \u003c/span\u003e\u003cspan class=\"nv\"\u003e$DESC\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e running \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"c1\"\u003e# Only stop the server if we see it running\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            stop_server\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            log_end_msg \u003cspan class=\"nv\"\u003e$?\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"c1\"\u003e# If it\u0026#39;s not running don\u0026#39;t do anything\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            log_progress_msg \u003cspan class=\"s2\"\u003e\u0026#34;apparently not running\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            log_end_msg \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  force-stop\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# First try to stop gracefully the program\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003e$0\u003c/span\u003e stop\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e running\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"c1\"\u003e# If it\u0026#39;s still running try to kill it more forcefully\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            log_daemon_msg \u003cspan class=\"s2\"\u003e\u0026#34;Stopping (force) \u003c/span\u003e\u003cspan class=\"nv\"\u003e$DESC\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            force_stop\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            log_end_msg \u003cspan class=\"nv\"\u003e$?\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  restart\u003cspan class=\"p\"\u003e|\u003c/span\u003eforce-reload\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        log_daemon_msg \u003cspan class=\"s2\"\u003e\u0026#34;Restarting \u003c/span\u003e\u003cspan class=\"nv\"\u003e$DESC\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        stop_server\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Wait some sensible amount, some server need this\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e[\u003c/span\u003e -n \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$DIETIME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e sleep \u003cspan class=\"nv\"\u003e$DIETIME\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        start_server\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        running\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        log_end_msg \u003cspan class=\"nv\"\u003e$?\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  status\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        log_daemon_msg \u003cspan class=\"s2\"\u003e\u0026#34;Checking status of \u003c/span\u003e\u003cspan class=\"nv\"\u003e$DESC\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e running \u003cspan class=\"p\"\u003e;\u003c/span\u003e  \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            log_progress_msg \u003cspan class=\"s2\"\u003e\u0026#34;running\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            log_end_msg \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            log_progress_msg \u003cspan class=\"s2\"\u003e\u0026#34;apparently not running\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            log_end_msg \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  reload\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        log_warning_msg \u003cspan class=\"s2\"\u003e\u0026#34;Reloading \u003c/span\u003e\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e daemon: not implemented, as the daemon\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        log_warning_msg \u003cspan class=\"s2\"\u003e\u0026#34;cannot re-read the config file (use restart).\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  *\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"nv\"\u003eN\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/etc/init.d/\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Usage: \u003c/span\u003e\u003cspan class=\"nv\"\u003e$N\u003c/span\u003e\u003cspan class=\"s2\"\u003e {start|stop|force-stop|restart|force-reload|status}\u0026#34;\u003c/span\u003e \u0026gt;\u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"m\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eSave the file!\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"autostarting\"\u003e\u003ca href=\"#autostarting\" class=\"header-mark\" aria-label=\"Header mark for 'Autostarting'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eAutostarting\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eAlmost ready, Now, In \u003ccode\u003e/etc/default/darkice\u003c/code\u003e check that you have\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eyaml\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-11\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"l\"\u003eRUN=yes\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThen restart the service\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-12\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl daemon-reload\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAdd default user nobody to the audio group (in my case, to work with ALSA)\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-13\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eadduser nobody audio\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eFix start sequence so that Darkice is one of the last services to load\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-14\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eupdate-rc.d -f darkice remove\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eupdate-rc.d darkice defaults \u003cspan class=\"m\"\u003e99\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eNot directly related to the init script, but note that darkice is being run as nobody:nobody. This user can’t set the realtime scheduling priority requests in darkice’s configuration file, so we give the binary that capability:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-15\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo setcap \u003cspan class=\"nv\"\u003ecap_sys_nice\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e+ep \u003cspan class=\"sb\"\u003e`\u003c/span\u003ewhich darkice\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"reboot-and-connect-to-your-usb-turntable\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eReboot and connect to your USB turntable\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eThat is it, connect your streaming client up to (http://vinyl/listen.mp3) and put on a record, you should now be able to enjoy the tunes from the deck on your computer.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"sonos--tunein\"\u003e\u003ca href=\"#sonos--tunein\" class=\"header-mark\" aria-label=\"Header mark for 'Sonos / Tunein'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eSonos / Tunein\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eOn Sonos, add your streaming turntable URL (http://vinyl/listen.mp3) by Using the Sonos App for iOS or Android:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFrom the Browse tab, select Radio by TuneIn.\u003c/li\u003e\n\u003cli\u003eTap My Radio Stations.\u003c/li\u003e\n\u003cli\u003eTap the three dots in the top right and tap Add New Radio Station.\u003c/li\u003e\n\u003cli\u003eEnter the Streaming URL and Station Name and tap OK.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"pi-musicbox\"\u003e\u003ca href=\"#pi-musicbox\" class=\"header-mark\" aria-label=\"Header mark for 'Pi Musicbox'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003ePi Musicbox\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eOn Pi Musicbox, add the URL to your \u003ccode\u003e/boot/config/radiostations.js\u003c/code\u003e file or use the GUI.\u003c/p\u003e\n\u003cp\u003eOr switch to \u003ca href=\"https://volumio.org/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eVolumio\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"acknowledgements\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eAcknowledgements\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eData in this post is a collection from 3 sources, and combined into a single unified flow, tested on a Pi3, running Buster 2021-02\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://mykter.com/2019/02/02/streaming-vinyl-raspberry-pi\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehttps://mykter.com/2019/02/02/streaming-vinyl-raspberry-pi\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/basdp/USB-Turntables-to-Sonos-with-RPi\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehttps://github.com/basdp/USB-Turntables-to-Sonos-with-RPi\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coreyk/darkice-libaacplus-rpi-guide/blob/master/README.md\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehttps://github.com/coreyk/darkice-libaacplus-rpi-guide/blob/master/README.md\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
        "language": "en"
    },
    {
        "title" : "Azure IaC - Tags as Parameters",
        "date_published" : "2021-01-17T00:00:00Z",
        "date_modified" : "2021-01-17T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/azure-iac-tags-as-parameters/",
        "url" : "https://damianflynn.github.io/posts/azure-iac-tags-as-parameters/",
        "summary": "Deploying infrastructure ARM Templates to Azure, but using Tags and thier respective value as the parameter configuration settings\nIn the post, I am going to introduce a concept which will allow you to greatly up your Infrastructure as Code game, by using Azure as a State Machine!\nOne of the typical challenges when deploying ARM templates, is the sheer number of parameters which we find as a requirement to complete a deployment; which as you will appreciate gets considerably harder as we target many environments.\n",
        "content_html" : "\u003cp\u003eDeploying infrastructure ARM Templates to Azure, but using Tags and thier respective value as the parameter configuration settings\u003c/p\u003e\n\u003cp\u003eIn the post, I am going to introduce a concept which will allow you to greatly up your Infrastructure as Code game, by using Azure as a State Machine!\u003c/p\u003e\n\u003cp\u003eOne of the typical challenges when deploying ARM templates, is the sheer number of parameters which we find as a requirement to complete a deployment; which as you will appreciate gets considerably harder as we target many environments.\u003c/p\u003e\n\u003cp\u003eThere are a number of methods to address this, including the use of Parameter files or Continuous deployment variables; each with their own challenges.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"resource-tags\"\u003e\u003ca href=\"#resource-tags\" class=\"header-mark\" aria-label=\"Header mark for 'Resource Tags'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"resource-tags\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eResource Tags\u003c/strong\u003e\n\u003c/h1\u003e\n\u003cp\u003eTags can be applied at both the level of the subscription and resources.\u003c/p\u003e\n\u003cp\u003eFor the purpose of this post we will use a scenario of the recovery vault. At the subscription level, we will apply 2 tags to identity the vault we will target for the resources, and then on the actual resource we will add a tag to identity the recovery policy we wish to be applied.\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003cstrong\u003eresource\u003c/strong\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cstrong\u003etag\u003c/strong\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cstrong\u003evalue\u003c/strong\u003e\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003esubscription\u003c/td\u003e\n          \u003ctd\u003erecoveryVault\u003c/td\u003e\n          \u003ctd\u003ep-vault-001\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003esubscription\u003c/td\u003e\n          \u003ctd\u003erecoveryVaultRG\u003c/td\u003e\n          \u003ctd\u003ep-vault\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eresource\u003c/td\u003e\n          \u003ctd\u003erecoveryPolicy\u003c/td\u003e\n          \u003ctd\u003eDefaultPolicy\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"subscription-level-tags\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eSubscription Level Tags\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eWith these Tags applied, we will have something similar to the following at the subscription level:\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/20210117-arm-param-01_12539394429083373976.png\" width=\"2000\" height=\"576\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003cp\u003eIn my lab the subscription is \u003ccode\u003e/subscriptions/547d54ea-411b-459e-b6f8-b3cc5e84c535\u003c/code\u003e\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"resource-tags-1\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eResource Tags\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eAnd the VM called p-vm001, which will represent the resource which we are going to monitor the tag on in my lab will be in the same subscription (for permissions to be simplified), hosted in a resource group called p-vm\u003c/p\u003e\n\u003cp\u003eThe full resource ID of this VM in the lab is \u003ccode\u003e/subscriptions/547d54ea-411b-459e-b6f8-b3cc5e84c535/resourceGroups/p-vm/providers/Microsoft.Compute/virtualMachines/p-vm001\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/20210117-arm-param-02_10364229578791092776.png\" width=\"2000\" height=\"445\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"arm-magic\"\u003e\u003ca href=\"#arm-magic\" class=\"header-mark\" aria-label=\"Header mark for 'ARM Magic'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"arm-magic\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eARM Magic\u003c/strong\u003e\n\u003c/h1\u003e\n\u003cp\u003eNow, we have all the parts of this environment in place, we will create an ARM template, which simply looks up the values of these tags for us, and to illustrate how it works, it will return the values as outputs.\u003c/p\u003e\n\u003cp\u003eUsing the Custom Template Deployment in Azure Portal, paste the sample template below\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;$schema\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;contentVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;1.0.0.0\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;parameters\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;sourceResourceId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;String\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/subscriptions/547d54ea-411b-459e-b6f8-b3cc5e84c535/resourceGroups/p-vm/providers/Microsoft.Compute/virtualMachines/p-vm001\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;The resource ID of the resource we wish to look up a tag from.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;variables\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;referenceSubscriptionTagsResourceId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[concat(\u0026#39;/subscriptions/\u0026#39;, subscription().subscriptionId, \u0026#39;/providers/Microsoft.Resources/tags/default\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;referenceResourceTagsResourceId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[concat(parameters(\u0026#39;sourceResourceId\u0026#39;),\u0026#39;/providers/Microsoft.Resources/tags/default\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"nt\"\u003e\u0026#34;referenceTagsApi\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;2020-06-01\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;resources\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;outputs\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;recoveryVaultId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;String\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[resourceId(subscription().subscriptionId,  reference(variables(\u0026#39;referenceSubscriptionTagsResourceId\u0026#39;), variables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryVaultRG ,\u0026#39;Microsoft.RecoveryServices/vaults\u0026#39;,  reference(variables(\u0026#39;referenceSubscriptionTagsResourceId\u0026#39;), variables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryVault) ]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;recoveryPolicyId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[concat( resourceId(subscription().subscriptionId,  reference(variables(\u0026#39;referenceSubscriptionTagsResourceId\u0026#39;), variables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryVaultRG ,\u0026#39;Microsoft.RecoveryServices/vaults\u0026#39;,  reference(variables(\u0026#39;referenceSubscriptionTagsResourceId\u0026#39;), variables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryVault), \u0026#39;/backupPolicies/\u0026#39;, reference(variables(\u0026#39;referenceResourceTagsResourceId\u0026#39;), variables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryPolicy )]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;subscriptionRecoveryVaultRGTag\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[reference(variables(\u0026#39;referenceSubscriptionTagsResourceId\u0026#39;), variables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryVaultRG]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;subscriptionRecoveryVaultTag\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[reference(variables(\u0026#39;referenceSubscriptionTagsResourceId\u0026#39;), variables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryVault]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;resourceRecoveryPolicyTag\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;String\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[reference(variables(\u0026#39;referenceResourceTagsResourceId\u0026#39;), variables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryPolicy]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eNext, Check your going to deploy to the lab environment subscription, and resource group where we have the test VM which we will check the tag on\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/20210117-arm-param-03_9727890893097291034.png\" width=\"2000\" height=\"1623\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eClick on the Review and Create Button, allow the validation to complete, and then click again on Create\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eAs this is simply a reference deployment, it will complete instantly, so next we can check the output from the deployment\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/20210117-arm-param-04_6895997523805603048.png\" width=\"2000\" height=\"689\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003cp\u003eNow, we should see all the tag values which we set in the lab!\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"understanding-the-template\"\u003e\u003ca href=\"#understanding-the-template\" class=\"header-mark\" aria-label=\"Header mark for 'Understanding the Template'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"understanding-the-template\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eUnderstanding the Template\u003c/strong\u003e\n\u003c/h1\u003e\n\u003cp\u003eSo, How?\u003c/p\u003e\n\u003cp\u003eThe following ARM JSON uses the \u003ccode\u003ereference\u003c/code\u003e function to lookup the data we care about\u003c/p\u003e\n\u003cp\u003eWe establish to variables which we use to point at both the tags provider for the current subscription \u003ccode\u003ereferenceSubscriptionTagsResourceId\u003c/code\u003e and also, the Resource ID of the lab VM \u003ccode\u003ereferenceResourceTagsResourceId\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eWe also will need a provider API version, while looking up the values of these tags, so we also can use a variable \u003ccode\u003ereferenceTagsApi\u003c/code\u003e to store this.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;variables\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;referenceSubscriptionTagsResourceId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[concat(\u0026#39;/subscriptions/\u0026#39;, subscription().subscriptionId, \u0026#39;/providers/Microsoft.Resources/tags/default\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;referenceResourceTagsResourceId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[concat(parameters(\u0026#39;sourceResourceId\u0026#39;),\u0026#39;/providers/Microsoft.Resources/tags/default\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"nt\"\u003e\u0026#34;referenceTagsApi\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;2020-06-01\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"subscription-tags\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eSubscription Tags\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eNow, the magic. In the outputs, we simply reference the resource ID of the Tag provider for the subscription, with its API version, naming the tag as the last parameter, for example \u003ccode\u003erecoveryVaultRG\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"err\"\u003ereference(variables(\u0026#39;referenceSubscriptionTagsResourceId\u0026#39;)\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"err\"\u003evariables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryVaultRG\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eWe do exactly the same for the subscription Recovery Vault tag called \u003ccode\u003erecoveryVault\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-4\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"err\"\u003ereference(variables(\u0026#39;referenceSubscriptionTagsResourceId\u0026#39;)\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"err\"\u003evariables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryVault\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"resource-tags-2\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eResource tags\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eIn a very similar manner we can reference the tags on the resource, returning the \u003ccode\u003erecoveryPolicy\u003c/code\u003e tag value\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-5\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"err\"\u003ereference(variables(\u0026#39;referenceResourceTagsResourceId\u0026#39;)\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"err\"\u003evariables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryPolicy\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"getting-creative\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eGetting Creative\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eFinally, with some concatenation, we can now build resource identifiers dynamically so that we an combine the values of the tags to reference recovery vaults, and recovery policies\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-6\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;recoveryVaultId\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;String\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[resourceId(subscription().subscriptionId,  reference(variables(\u0026#39;referenceSubscriptionTagsResourceId\u0026#39;), variables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryVaultRG ,\u0026#39;Microsoft.RecoveryServices/vaults\u0026#39;,  reference(variables(\u0026#39;referenceSubscriptionTagsResourceId\u0026#39;), variables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryVault) ]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003cspan class=\"err\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;recoveryPolicyId\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[concat( resourceId(subscription().subscriptionId,  reference(variables(\u0026#39;referenceSubscriptionTagsResourceId\u0026#39;), variables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryVaultRG ,\u0026#39;Microsoft.RecoveryServices/vaults\u0026#39;,  reference(variables(\u0026#39;referenceSubscriptionTagsResourceId\u0026#39;), variables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryVault), \u0026#39;/backupPolicies/\u0026#39;, reference(variables(\u0026#39;referenceResourceTagsResourceId\u0026#39;), variables(\u0026#39;referenceTagsApi\u0026#39;)).tags.recoveryPolicy )]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003cspan class=\"err\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eIn this case our lab produced the following references\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003cstrong\u003eOutput Key\u003c/strong\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cstrong\u003eOutput value\u003c/strong\u003e\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003erecoverVaultId\u003c/td\u003e\n          \u003ctd\u003e/subscriptions/547d54ea-411b-459e-b6f8-b3cc5e84c535/resourceGroups/p-vault/providers/Microsoft.RecoveryServices/vaults/p-vault-001\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003erecoveryPolicyId\u003c/td\u003e\n          \u003ctd\u003e/subscriptions/547d54ea-411b-459e-b6f8-b3cc5e84c535/resourceGroups/p-vault/providers/Microsoft.RecoveryServices/vaults/p-vault-001/backupPolicies/DefaultPolicy\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eNow - we have the ability to leverage Azure as a stateful configuration database!\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Change Detection Using Oxidized",
        "date_published" : "2020-06-29T00:00:00Z",
        "date_modified" : "2020-06-29T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/change-detection-using-oxidized/",
        "url" : "https://damianflynn.github.io/posts/change-detection-using-oxidized/",
        "summary": "Oxidized is a Linux based service which has the ability to monitor a device’s configuration, including software and hardware. Current configuration is backed up from each device and stored to a GIT repository to maintain history of changes.\nThe process is very simple:\nLogin to each device in the router list router.db, Run Commands to get the information that will be saved Clean the output Commit the Changes to GIT Repository The tool is coded in Ruby, and implements a Domain Specific Language (DSL) for interaction.\n",
        "content_html" : "\u003cp\u003eOxidized is a Linux based service which has the ability to monitor a device’s configuration, including software and hardware. Current configuration is backed up from each device and stored to a GIT repository to maintain history of changes.\u003c/p\u003e\n\u003cp\u003eThe process is very simple:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eLogin to each device in the router list \u003ccode\u003erouter.db\u003c/code\u003e,\u003c/li\u003e\n\u003cli\u003eRun Commands to get the information that will be saved\u003c/li\u003e\n\u003cli\u003eClean the output\u003c/li\u003e\n\u003cli\u003eCommit the Changes to GIT Repository\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eThe tool is coded in \u003cem\u003eRuby\u003c/em\u003e, and implements a Domain Specific Language (DSL) for interaction.\u003c/p\u003e\n\u003cp\u003eFinally, there is a Web based User experience included in the solution so we can get a fast overview of the world.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"docker-container\"\u003e\u003ca href=\"#docker-container\" class=\"header-mark\" aria-label=\"Header mark for 'Docker Container'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"docker-container\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eDocker Container\u003c/strong\u003e\n\u003c/h1\u003e\n\u003cp\u003eAll of the configuration for my container is hosted at the file system location \u003ccode\u003e/opt/appdata/oxidized\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eI will also select to execute the Web Interface for Oxidized using its default port with is \u003ccode\u003etcp:8888\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eUsing the follow command, we will grab the latest container version from Docker Hub, and call the container \u003cem\u003eoxidized\u003c/em\u003e locally. Additionally, if the container should stop, I am providing the flag to instruct docker to always restart the service again.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo docker run --restart always -v /opt/appdata/oxidized:/root/.config/oxidized -p 8888:8888/tcp -t oxidized/oxidized:latest oxidized\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"configuration\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eConfiguration\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eWe need a configuration file to guide Oxidized running process\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evi config\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThe following is the configuration sample that I am running with\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eyaml\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nn\"\u003e---\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eadmin\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003epassword\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eP@ssw0rd!\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emodel\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ejunos\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eresolve_dns\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003einterval\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e3600\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003euse_syslog\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003edebug\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ethreads\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e30\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003etimeout\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e20\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eretries\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eprompt\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e!\u003cspan class=\"l\"\u003eruby/regexp /^([\\w.@-]+[#\u0026gt;]\\s?)$/\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003erest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e0.0.0.0\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e8888\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003enext_adds_job\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003evars\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e{}\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003egroups\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e{}\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emodels\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e{}\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003epid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/root/.config/oxidized/pid\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ecrash\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edirectory\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/root/.config/oxidized/crashes\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ehostnames\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003estats\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ehistory_size\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e10\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003einput\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edefault\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003essh, telnet\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edebug\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003essh\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003esecure\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eftp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003epassive\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eutf8_encoded\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eoutput\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edefault\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003egit\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003edirectory\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/root/.config/oxidized/configs\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003egit\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003esingle_repo\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003euser\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eOxidized\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eemail\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eoxidized@email.target\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003erepo\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;~/.config/oxidized/oxidized.git\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003esource\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edefault\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecsv\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ecsv\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e~/.config/oxidized/router.db\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003edelimiter\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e!\u003cspan class=\"l\"\u003eruby/regexp /:/\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003emap\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eip\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003emodel\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003epassword\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e4\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003emodel_map\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ecisco\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eios\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ejuniper\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ejunos\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eunifiap\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eairos\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eedgeos\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eedgeos\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"device-list\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Device list\n\u003c/h2\u003e\n\u003cp\u003eThe table based on the configuration we just defined, will be formatted as follows\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003cstrong\u003eName\u003c/strong\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cstrong\u003eIP\u003c/strong\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cstrong\u003eModel\u003c/strong\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cstrong\u003eUsername\u003c/strong\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cstrong\u003ePassword\u003c/strong\u003e\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eDevice Name\u003c/td\u003e\n          \u003ctd\u003e172.16.1.x\u003c/td\u003e\n          \u003ctd\u003eunifiap\u003c/td\u003e\n          \u003ctd\u003esysadmin\u003c/td\u003e\n          \u003ctd\u003eP@ssw0rd!\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eTo populate the table, we can open the editor \u003ccode\u003evi router.db\u003c/code\u003e, and then inset the following sample entries\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eyaml\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-4\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"l\"\u003eBedroom1_ap:172.16.1.114:unifiap:sysadmin:P@ssw0rd!\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003eKitchen_ap:172.16.1.121:unifiap:sysadmin:P@ssw0rd!\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003eCinema_ap:172.16.1.160:unifiap:sysadmin:P@ssw0rd!\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003eServerRoom_ap:172.16.1.115:unifiap:sysadmin:P@ssw0rd!\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"l\"\u003eFirewall:172.16.1.1:edgeos:ubnt:Sc0rp10n!\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eNow, we are ready, we have the configuration all set for this installation\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"web-interface\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eWeb Interface\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eLaunching our browser to the oxidized site hosted on \u003ccode\u003eTCP 8888\u003c/code\u003e renders the current status\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/2020-06-30-oxid-01_2032262366859203679.png\" width=\"2000\" height=\"726\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003cp\u003eFrom here we can see all the version changes for the devices configuration\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/2020-06-30-oxid-02_4028362360960749562.png\" width=\"2000\" height=\"974\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003cp\u003eAnd even select any one of these change sets, and view the changes which were applied to the configuration\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/2020-06-30-oxid-03_17977889039885264314.png\" width=\"2000\" height=\"845\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"closing-thoughts\"\u003e\u003ca href=\"#closing-thoughts\" class=\"header-mark\" aria-label=\"Header mark for 'Closing Thoughts'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"closing-thoughts\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Closing Thoughts\n\u003c/h1\u003e\n\u003cp\u003eNow, How do you think this might work with Azure?…\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Azure Enterprise Agreement Delegation",
        "date_published" : "2020-04-24T00:00:00Z",
        "date_modified" : "2020-04-24T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/azure-enterprise-agreement-delegation/",
        "url" : "https://damianflynn.github.io/posts/azure-enterprise-agreement-delegation/",
        "summary": "Delegating Azure Enterprise Agreement Owner privileges to a Service Principal (SPN)\nUnder the Enterprise agreement we have some different Persona’s, which have quite different abilities and operations upon which they are permitted to preform.\nBefore we being the process of delegation, It is important to understand this Hierarchy, so we can correctly proceed with the technical work ahead.\nEnterprise Administrator Has the ability to add additional Enterprise and Department Administrators, Additional this persona can\n",
        "content_html" : "\u003cp\u003eDelegating Azure Enterprise Agreement Owner privileges to a Service Principal (SPN)\u003c/p\u003e\n\u003cp\u003eUnder the Enterprise agreement we have some different Persona’s, which have quite different abilities and operations upon which they are permitted to preform.\u003c/p\u003e\n\u003cp\u003eBefore we being the process of delegation, It is important to understand this Hierarchy, so we can correctly proceed with the technical work ahead.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"enterprise-administrator\"\u003e\u003ca href=\"#enterprise-administrator\" class=\"header-mark\" aria-label=\"Header mark for 'Enterprise Administrator'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"enterprise-administrator\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eEnterprise Administrator\u003c/strong\u003e\n\u003c/h1\u003e\n\u003cp\u003eHas the ability to add additional Enterprise and Department Administrators, Additional this persona can\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Departments\u003c/li\u003e\n\u003cli\u003eAdd or Associate Accounts to and Enrolment\u003c/li\u003e\n\u003cli\u003eCan view usage and charges across ALL Accounts and Subscriptions\u003c/li\u003e\n\u003cli\u003eCan view the monetary commitment balance associated to the Enrolment\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThere is no limit on the number of Enterprise Administrators that can be associated with an Enrolment, and additionally a notification contact can be assigned to receive all email notifications issued.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"department-administrator\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eDepartment Administrator\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eThe Department Administrator has ability to do the following:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCreate Department Administrator (Department focus – click on add administrator)\u003c/li\u003e\n\u003cli\u003eView/Edit Department properties such as name or Cost Center (Department focus – click on edit pen icon)\u003c/li\u003e\n\u003cli\u003eCreate a new Account Owner on the Department they administer (Switch to Account focus – click on add account)\u003c/li\u003e\n\u003cli\u003eRemove the associated Accounts from the Department they administer (In Account focus – hover over account and then select the x icon to delete)\u003c/li\u003e\n\u003cli\u003eDownload usage details of the Department they administer (Switch to Reports panel on left – Select Download Usage focus)\u003c/li\u003e\n\u003cli\u003eView the monthly Usage and Charges associated to their Department if Enterprise Administrator has granted permission to do so. (Switch to Reports panel on left –Select Usage Summary focus)\u003c/li\u003e\n\u003cli\u003eEnable the Account owners to create Non Production Subscriptions\n\u003cul\u003e\n\u003cli\u003eSubscription Offer MS-AZR-0148P for Dev/Test\u003c/li\u003e\n\u003cli\u003eSubscription Offer MS-AZR-0017P for Production\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"account-owners\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eAccount Owners\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eThe Account Owner can add Subscriptions to their Accounts. Additionally they have the ability to\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the Service Administrator for a Subscription\u003c/li\u003e\n\u003cli\u003eView Usage Data for their Account\u003c/li\u003e\n\u003cli\u003eIf enabled by the Enterprise Administrator, can also view Account Charges\u003c/li\u003e\n\u003cli\u003eEnumerate existing subscriptions in their account\u003c/li\u003e\n\u003cli\u003eCreate new subscriptions within the scope of their account\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe Account Owner also has the privilege’s of delegating their responsibility (Role) to a Service Principal; which is the core of the process we are going to undertaken in this post.\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eAs of March 2020; this is no longer relevant. This account is REQUIRED to have established at least on subscription manually.\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cp\u003eIn the \u003ca href=\"https://ea.azure.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eEA Portal\u003c/a\u003e, the \u003cem\u003eAccount\u003c/em\u003e page for a Department will present a list of established subscription.\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/2020-04-24-ea-01_1621110745679535927.png\" width=\"2000\" height=\"380\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"programmatic-subscription-creation\"\u003e\u003ca href=\"#programmatic-subscription-creation\" class=\"header-mark\" aria-label=\"Header mark for 'Programmatic Subscription Creation'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"programmatic-subscription-creation\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eProgrammatic Subscription Creation\u003c/strong\u003e\n\u003c/h1\u003e\n\u003cp\u003eThe objective of the is process is to delegate the EA Account Owner privilege’s to a Service Principal, which can be leveraged to programmatically establish subscriptions. While the procedure is not overly complex; we will break the operation in 4 key milestones, which should make this easier to understand.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eEA Department Account Owner\u003c/li\u003e\n\u003cli\u003eService Principal for Delegation\u003c/li\u003e\n\u003cli\u003eDelegating EA Account Owner Privilege’s\u003c/li\u003e\n\u003cli\u003eValidation\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"ea-department-account-owner\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eEA Department Account Owner\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eUsing the Azure AD account credentials for your Microsoft Tenant, you should be able to authenticate with the \u003ca href=\"https://ea.azure.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eEA Portal\u003c/a\u003e, and view the \u003cem\u003eAccount\u003c/em\u003e page, as illustrated earlier.\u003c/p\u003e\n\u003cp\u003eOnce you have confirmed that this works as expected, we will repeat this authentication again, however this time, using either the Azure Powershell Module or the Azure CLI; The guide will present the commands used in either scenario.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"authenticate-to-azure-the-ea-account-owner-credentials\"\u003e\u003ca href=\"#authenticate-to-azure-the-ea-account-owner-credentials\" class=\"header-mark\" aria-label=\"Header mark for 'Authenticate to Azure the EA Account Owner Credentials'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eAuthenticate to Azure the EA Account Owner Credentials\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eWith working credentials validated in the EA Web portal, proceed with a new shell session and authenticate to Azure with your EA Account Owner credentials; you may also take advantage of the Azure Cloud Shell which will automate the login experience.\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eThe credentials MUST be hosted in the tenants AAD instance. Microsoft Accounts, or Guest accounts from other AAD Tenants are NOT Supported for the following procedures.\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePS\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$aadTenantId\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e      \u003cspan class=\"s2\"\u003e\u0026#34;aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa\u0026#34;\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePS\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$azSubscriptionId\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;42d96448-0b0a-4b33-9d9a-5653a3f11811\u0026#34;\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePS\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nb\"\u003eConnect-AzAccount\u003c/span\u003e \u003cspan class=\"n\"\u003e-TenantId\u003c/span\u003e \u003cspan class=\"nv\"\u003e$aadTenantId\u003c/span\u003e \u003cspan class=\"n\"\u003e-Subscription\u003c/span\u003e \u003cspan class=\"nv\"\u003e$azSubscriptionId\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; az login\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"check-the-ea-accounts-which-we-have-access-to\"\u003e\u003ca href=\"#check-the-ea-accounts-which-we-have-access-to\" class=\"header-mark\" aria-label=\"Header mark for 'Check the EA Accounts which we have access to'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eCheck the EA Accounts which we have access to\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eOnce you have authenticated, we will verify that the credentials do indeed have access to the EA environment, but getting a list of the EA Accounts which can be accessed\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePS\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$eaAccountList\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eGet-AzEnrollmentAccount\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePS\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$eaAccountList\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eObjectId\u003c/span\u003e                              \u003cspan class=\"n\"\u003ePrincipalName\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e--------\u003c/span\u003e                              \u003cspan class=\"p\"\u003e-------------\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mf\"\u003e88888888\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e8888\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e8888\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e8888\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e888888888888\u003c/span\u003e  \u003cspan class=\"n\"\u003eeaaccountowner\u003c/span\u003e\u003cspan class=\"nv\"\u003e@org\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eonmicrosoft\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003ecom\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePS\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$EAAccountId\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nv\"\u003e$eaAccountList\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eObjectId\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-4\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; az billing enrollment-account list\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;/providers/Microsoft.Billing/enrollmentAccounts/88888888-8888-8888-8888-888888888888\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;88888888-8888-8888-8888-888888888888\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;principalName\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;eaaccountowner@org.onmicrosoft.com\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Billing/enrollmentAccounts\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAssuming the results of these commands, presents back your account, and a billing enrollment object we are ready to proceed. If this is not the case, you must check that you are using the correct account.\u003c/p\u003e\n\u003cp\u003eThe important data you have as we complete this stage is\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003cstrong\u003eVariable\u003c/strong\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cstrong\u003eValue\u003c/strong\u003e\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAzure AD Tenant Id\u003c/td\u003e\n          \u003ctd\u003eaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eEA Account ID\u003c/td\u003e\n          \u003ctd\u003e88888888-8888-8888-8888-888888888888\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"service-principal-for-delegation\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eService Principal for Delegation\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eOur objective is to delegate the role of creating new Azure Subscriptions to a Service Principal. Before we begin that effort; we first need to know the ObjectID of the (Service Principal) SPN which we are delegating to.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"create-a-new-principal\"\u003e\u003ca href=\"#create-a-new-principal\" class=\"header-mark\" aria-label=\"Header mark for 'Create a new principal'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eCreate a new principal\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eEstablish a new AzureAD Application and a Service Principal in the AD Tenant. If you have an existing application which you would rather utilize; we can skip this step and reference that object in the next stage\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-5\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$password\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;S3cR3tP@ssw0rd!\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$credentials\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eNew-Object\u003c/span\u003e \u003cspan class=\"n\"\u003eMicrosoft\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eAzure\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eCommands\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eActiveDirectory\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003ePSADPasswordCredential\u003c/span\u003e \u003cspan class=\"n\"\u003e-Property\u003c/span\u003e \u003cspan class=\"vm\"\u003e@\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003eStartDate\u003c/span\u003e\u003cspan class=\"p\"\u003e=\u003c/span\u003e\u003cspan class=\"nb\"\u003eGet-Date\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"n\"\u003eEndDate\u003c/span\u003e\u003cspan class=\"p\"\u003e=\u003c/span\u003e\u003cspan class=\"nb\"\u003eGet-Date\u003c/span\u003e \u003cspan class=\"n\"\u003e-Year\u003c/span\u003e \u003cspan class=\"mf\"\u003e2024\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"n\"\u003ePassword\u003c/span\u003e\u003cspan class=\"p\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$password\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$spName\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;AZ GOV Subscription Provision\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$sp\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eNew-AzAdServicePrincipal\u003c/span\u003e \u003cspan class=\"n\"\u003e-DisplayName\u003c/span\u003e \u003cspan class=\"nv\"\u003e$spName\u003c/span\u003e \u003cspan class=\"n\"\u003e-PasswordCredential\u003c/span\u003e \u003cspan class=\"nv\"\u003e$credentials\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-6\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCaz ad sp create-for-rbac --name \u003cspan class=\"s2\"\u003e\u0026#34;azGOVSubscriptionProvision\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;appId\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;displayName\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;azGOVSubscriptionProvision\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;http://azGOVSubscriptionProvision\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;password\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;8ff3e80e-a518-4dfa-ad5f-235bfb1d8bd9\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;tenant\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAssuming no errors with this command, you should be able to locate the new principal in the Azure AD portal, under Enterprise Applications.\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/2020-04-24-ea-02_3634654145505783952.png\" width=\"2000\" height=\"908\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"get-the-application-id\"\u003e\u003ca href=\"#get-the-application-id\" class=\"header-mark\" aria-label=\"Header mark for 'Get the Application ID'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eGet the Application ID\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eIf you plan on using a newly created Service Principal for the delegation, we can quickly reference it, and store it to a variable\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-7\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePS\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appId\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nv\"\u003e$sp\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eId\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePS\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appId\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eeeeeeeee-eeee\u003c/span\u003e\u003cspan class=\"n\"\u003e-eeee-eeee-eeeeeeeeeeee\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAlternative, we can reference an existing application, and get its Application Id, in this case we simply provide the display name of the service principal we are going to reference\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-8\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; az ad sp list --display-name azGOVSubscriptionProvision --query \u003cspan class=\"s2\"\u003e\u0026#34;[].objectId\u0026#34;\u003c/span\u003e -o tsv\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eeeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"delegating-ea-account-owner-privileges\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eDelegating EA Account Owner Privilege’s\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eFinally, we are at the heart of the show. We will delegate the Account Owner role to the chosen Service Principal.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"add-the-service-principal-to-your-enrollment-account\"\u003e\u003ca href=\"#add-the-service-principal-to-your-enrollment-account\" class=\"header-mark\" aria-label=\"Header mark for 'Add the service principal to your enrollment account'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eAdd the service principal to your enrollment account\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eThe following command will allocate the Owner role to the EA Account Id which we discovered earlier, to our chosen Service Principal\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-9\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePS\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nb\"\u003eNew-AzRoleAssignment\u003c/span\u003e \u003cspan class=\"n\"\u003e-ObjectId\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appId\u003c/span\u003e \u003cspan class=\"n\"\u003e-RoleDefinitionName\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Owner\u0026#34;\u003c/span\u003e \u003cspan class=\"n\"\u003e-Scope\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/providers/Microsoft.Billing/enrollmentAccounts/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$eaAccountId\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eRoleAssignmentId\u003c/span\u003e   \u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eproviders\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eMicrosoft\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eBilling\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eenrollmentAccounts\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"mf\"\u003e88888888\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e8888\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e8888\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e8888\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e888888888888\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eproviders\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eMicrosoft\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eAuthorization\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eroleAssignments\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eaa516c46\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1954\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003e4bac-bddf\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003e618f1f03acf6\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eScope\u003c/span\u003e              \u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eproviders\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eMicrosoft\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eBilling\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eenrollmentAccounts\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"mf\"\u003e88888888\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e8888\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e8888\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e8888\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e888888888888\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eDisplayName\u003c/span\u003e        \u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAZ\u003c/span\u003e \u003cspan class=\"n\"\u003eGOV\u003c/span\u003e \u003cspan class=\"n\"\u003eSubscription\u003c/span\u003e \u003cspan class=\"n\"\u003eProvision\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eSignInName\u003c/span\u003e         \u003cspan class=\"err\"\u003e:\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eRoleDefinitionName\u003c/span\u003e \u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eOwner\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eRoleDefinitionId\u003c/span\u003e   \u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003e8e3af657-a8ff\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003e443c-a75c\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003e2fe8c4bcb635\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eObjectId\u003c/span\u003e           \u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eeeeeeeee-eeee\u003c/span\u003e\u003cspan class=\"n\"\u003e-eeee-eeee-eeeeeeeeeeee\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eObjectType\u003c/span\u003e         \u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eServicePrincipal\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eCanDelegate\u003c/span\u003e        \u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eFalse\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-10\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; az role assignment create --role Owner --assignee-object-id eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee --scope /providers/Microsoft.Billing/enrollmentAccounts/88888888-8888-8888-8888-888888888888\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"s2\"\u003e\u0026#34;canDelegate\u0026#34;\u003c/span\u003e: null,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"s2\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;/providers/Microsoft.Billing/enrollmentAccounts/88888888-8888-8888-8888-888888888888/providers/Microsoft.Authorization/roleAssignments/11341c1d-7785-46a9-a415-147b5c5aec5c\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"s2\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;11341c1d-7785-46a9-a415-147b5c5aec5c\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"s2\"\u003e\u0026#34;principalId\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"s2\"\u003e\u0026#34;roleDefinitionId\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"s2\"\u003e\u0026#34;scope\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;/providers/Microsoft.Billing/enrollmentAccounts/88888888-8888-8888-8888-888888888888\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"s2\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Authorization/roleAssignments\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"azure-ad-directory-reader\"\u003e\u003ca href=\"#azure-ad-directory-reader\" class=\"header-mark\" aria-label=\"Header mark for 'Azure AD Directory Reader'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eAzure AD Directory Reader\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eFinally, To ensure the ability of assigning Onwers to the new subscriptions, we MUST also ensure that the Service Principal has the minimum privilege’s of Azure AD ‘Directory Reader’ role\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-11\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePS\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nb\"\u003eConnect-AzureAD\u003c/span\u003e \u003cspan class=\"n\"\u003e-TenantId\u003c/span\u003e \u003cspan class=\"nb\"\u003eaaaaaaaa-aaaa\u003c/span\u003e\u003cspan class=\"n\"\u003e-aaaa-aaaa-aaaaaaaaaaaa\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eAccount\u003c/span\u003e         \u003cspan class=\"n\"\u003eEnvironment\u003c/span\u003e \u003cspan class=\"n\"\u003eTenantId\u003c/span\u003e                             \u003cspan class=\"n\"\u003eTenantDomain\u003c/span\u003e             \u003cspan class=\"n\"\u003eAccountType\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e-------\u003c/span\u003e         \u003cspan class=\"p\"\u003e-----------\u003c/span\u003e \u003cspan class=\"p\"\u003e--------\u003c/span\u003e                             \u003cspan class=\"p\"\u003e------------\u003c/span\u003e             \u003cspan class=\"p\"\u003e-----------\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003euser\u003c/span\u003e\u003cspan class=\"nv\"\u003e@my\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eorg\u003c/span\u003e     \u003cspan class=\"n\"\u003eAzureCloud\u003c/span\u003e  \u003cspan class=\"nb\"\u003eaaaaaaaa-aaaa\u003c/span\u003e\u003cspan class=\"n\"\u003e-aaaa-aaaa-aaaaaaaaaaaa\u003c/span\u003e \u003cspan class=\"n\"\u003eorg\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eonmicrosoft\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003ecom\u003c/span\u003e      \u003cspan class=\"n\"\u003eUser\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePS\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nb\"\u003eAdd-AzureADDirectoryRoleMember\u003c/span\u003e \u003cspan class=\"n\"\u003e-ObjectId\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003eGet-AzureADDirectoryRole\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e \u003cspan class=\"nb\"\u003ewhere-object\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"nv\"\u003e$_\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eDisplayName\u003c/span\u003e \u003cspan class=\"o\"\u003e-eq\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Directory Readers\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}).\u003c/span\u003e\u003cspan class=\"py\"\u003eObjectid\u003c/span\u003e \u003cspan class=\"n\"\u003e-RefObjectId\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appId\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eFantastic - now we need to wait for the clock work engine in the back of the cloud to wake up the Noddy. Go have a Coffee, and then we can check the results of our efforts\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eThese delegations must be allowed to propagate, I have observed this taking up to 1 Hour!\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"validation\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eValidation\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eThe final stage of this effort is to validate that everything is working as desired. After waiting for delegations to propagate, we will authenticate to Azure as our Service Principal, and then attempt to communicate with the services we have granted access to. Ready?\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"login-as-your-new-service-principal\"\u003e\u003ca href=\"#login-as-your-new-service-principal\" class=\"header-mark\" aria-label=\"Header mark for 'Login as your new Service Principal'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eLogin as your new Service Principal\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eWith a new shell (or an existing on if you wish); we will proceed to login to Azure using the Service Principal Credentials. I assume the service principal has no Azure subscriptions delegated to it; so we will indicate that also at login time, to prevent warning.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-12\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e$\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eaz\u003c/span\u003e \u003cspan class=\"n\"\u003elogin\u003c/span\u003e \u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003e-service-principal\u003c/span\u003e \u003cspan class=\"n\"\u003e-u\u003c/span\u003e \u003cspan class=\"nb\"\u003eeeeeeeee-eeee\u003c/span\u003e\u003cspan class=\"n\"\u003e-eeee-eeee-eeeeeeeeeeee\u003c/span\u003e \u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003e-password\u003c/span\u003e \u003cspan class=\"n\"\u003eEaster2019\u003c/span\u003e \u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003e-tenant\u003c/span\u003e \u003cspan class=\"nb\"\u003eaaaaaaaa-aaaa\u003c/span\u003e\u003cspan class=\"n\"\u003e-aaaa-aaaa-aaaaaaaaaaaa\u003c/span\u003e \u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003e-allow-no-subscriptions\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;cloudName\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;AzureCloud\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;369b7bfe-5c66-41ef-837a-e2df4e9db6dd\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;isDefault\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003etrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Management\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;state\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Enabled\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;tenantId\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;user\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"s2\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"s2\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;servicePrincipal\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"check-you-have-directory-access\"\u003e\u003ca href=\"#check-you-have-directory-access\" class=\"header-mark\" aria-label=\"Header mark for 'Check you have Directory Access'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eCheck you have Directory Access\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eFirst test, lets see if we can read some object from the Azure AD\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-13\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; az ad user list\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAssuming no issues, you should see a list of users scroll by, feel free to terminate that process when you are satisfied that this is working to plan\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"check-we-have-access-to-the-enterprise-agreement-account\"\u003e\u003ca href=\"#check-we-have-access-to-the-enterprise-agreement-account\" class=\"header-mark\" aria-label=\"Header mark for 'Check we have access to the Enterprise Agreement Account'\"\u003e\u003c/a\u003e\n    \u003cstrong\u003eCheck we have access to the Enterprise Agreement Account\u003c/strong\u003e\n\u003c/h3\u003e\n\n\u003cp\u003eNow, the real meat; Do we have access to the Enterprise Agreement Account?\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ebash\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-14\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; az billing enrollment-account list\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;/providers/Microsoft.Billing/enrollmentAccounts/88888888-8888-8888-8888-888888888888\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;88888888-8888-8888-8888-888888888888\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;principalName\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;eaaccountowner@org.onmicrosoft.com\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Billing/enrollmentAccounts\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAssuming you get a response, take a close look at the \u003cem\u003eprincipalName\u003c/em\u003e and you will be presented with the name of the account who have delegated their privilege’s to this active service account to work as.\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Azure IaC - Function Keys",
        "date_published" : "2020-04-22T00:00:00Z",
        "date_modified" : "2020-04-22T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/azure-iac-function-keys/",
        "url" : "https://damianflynn.github.io/posts/azure-iac-function-keys/",
        "summary": "Retrieve the Function Host Keys while deploying an ARM template\nTodays conundrum: As I deploy a new Function Application, I need a simple methodology to retrieve the Host Keys for the function application so that I validate the deployment has been successful; and potentially pass on the key to related services, for example API Management.\nAs before, I am leveraging templates, and will stay cloud native; this time depending on the functions Output ability to present the keys.\n",
        "content_html" : "\u003cp\u003e\u003cstrong\u003eRetrieve the Function Host Keys while deploying an ARM template\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eTodays conundrum: As I deploy a new Function Application, I need a simple methodology to retrieve the Host Keys for the function application so that I validate the deployment has been successful; and potentially pass on the key to related services, for example API Management.\u003c/p\u003e\n\u003cp\u003eAs before, I am leveraging templates, and will stay cloud native; this time depending on the functions Output ability to present the keys.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"solution\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eSolution\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eA not well know ARM resource is going to be our Hero in this journey. The resource is a called \u003ccode\u003eMicrosoft.Web/sites/host/functionKeys\u003c/code\u003e and you can gain a little (actually almost none) more details on the Microsoft \u003ca href=\"https://docs.microsoft.com/en-us/azure/templates/microsoft.web/2018-02-01/sites/functions/keys\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ereference site\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eThe Documentation refer the API release 2018-02-01; But as you will see in the example code; I discovered that a slightly newer version available.\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cp\u003eThe Key to this deployment is the following resource definition\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;resources\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;comments\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;~~ Function App Keys  ~~\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Web/sites/host/functionKeys\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;apiVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;2018-11-01\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[concat(variables(\u0026#39;webappName\u0026#39;), \u0026#39;/default/apimanagement\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;dependsOn\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;[resourceId(\u0026#39;Microsoft.Web/sites/\u0026#39;, variables(\u0026#39;webappName\u0026#39;))]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;properties\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;api-management\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eLet’s inspect this closer\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003cstrong\u003eLines\u003c/strong\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cstrong\u003eDescription\u003c/strong\u003e\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e2\u003c/td\u003e\n          \u003ctd\u003eA simple comment defining the objective of this resource\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e3\u003c/td\u003e\n          \u003ctd\u003eThe Resource type we are deploying\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e4\u003c/td\u003e\n          \u003ctd\u003eThe Current API Version of the resource; Normally extracted from the Documentation.\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e5\u003c/td\u003e\n          \u003ctd\u003eThe Name of the resource, In this case we are defining a sub-resource of a \u003ccode\u003eMicrosoft.Web/sites\u003c/code\u003e; therefore the name is defined as {resourcename}/host/{Function Apps, Host Level Key Name}\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e6-8\u003c/td\u003e\n          \u003ctd\u003eEnsure that the Function App has been deployed before we attempt to create the Function App Host Key\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e9-11\u003c/td\u003e\n          \u003ctd\u003eSet the name for the Host Key we are creating\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eAfter this resource has been deployed, we then will reference this in our template \u003ccode\u003eoutput\u003c/code\u003e section\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;outputs\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;functionKey\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[listkeys(concat(resourceId(\u0026#39;Microsoft.Web/sites\u0026#39;, variables(\u0026#39;webappName\u0026#39;)), \u0026#39;/host/default/\u0026#39;),\u0026#39;2016-08-01\u0026#39;).functionKeys.apimanagement]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eIn the \u003ccode\u003evalue\u003c/code\u003e section of this output, we are getting a reference to the Function Applications resource identity we just deployed, and with this leverage the ARM Function of \u003ccode\u003elistkeys\u003c/code\u003e to return the function key for the resource we identified on Line 5 in the earlier snippet.\u003c/p\u003e\n\u003cp\u003eWith this output, we can now chain this as the input for additional templates, or reference the value for our scripts.\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Azure IaC - Appending Tags",
        "date_published" : "2020-04-01T00:00:00Z",
        "date_modified" : "2020-04-01T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/azure-iac-appending-tags/",
        "url" : "https://damianflynn.github.io/posts/azure-iac-appending-tags/",
        "summary": "Dynamically appending Tags to our ARM template with the union function\nTodays conundrum: As I am leveraging templates, there will always be some standard tags I require to implement within the template, but I also require to provide additional tags as a parameter to be appended with the deployment.\nMy objective is to set up tags within an ARM template in accordance with good governance and the Cloud adoption framework.\n",
        "content_html" : "\u003cp\u003e\u003cstrong\u003eDynamically appending Tags to our ARM template with the union function\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eTodays conundrum: As I am leveraging templates, there will always be some standard tags I require to implement within the template, but I also require to provide additional tags as a parameter to be appended with the deployment.\u003c/p\u003e\n\u003cp\u003eMy objective is to set up tags within an ARM template in accordance with good governance and the Cloud adoption framework.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"solution\"\u003e\u003ca href=\"#solution\" class=\"header-mark\" aria-label=\"Header mark for 'Solution'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"solution\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eSolution\u003c/strong\u003e\n\u003c/h1\u003e\n\u003cp\u003eARM Template functions to the rescue. Todays salvation is called \u003ccode\u003eunion\u003c/code\u003e, which you can learn more about on the actual \u003ca href=\"https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-template-functions-array#union\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ereference Site\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis is the existing implementation\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;$schema\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;contentVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;1.0.0.0\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;parameters\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;configVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;1.0.0.0\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;The version of the parameters file that holds the configuration.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;purpose\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;allowedValues\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;diag\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;log\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;audit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;data\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;data\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;The designated purpose of the storage account. \u0026#39;diag\u0026#39; for diagnostics, \u0026#39;log\u0026#39; for logging, \u0026#39;audit\u0026#39; for auditing, \u0026#39;data\u0026#39; for data storage\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;resilience\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;allowedValues\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Standard_LRS\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Standard_ZRS\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Standard_GRS\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Standard_RAGRS\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Standard_LRS\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Choose a level of resilience and tier suitable for the purpose and region\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;tier\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;allowedValues\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Standard\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Premium\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Standard\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Choose tier, Standard or Premium.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;kind\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;allowedValues\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Storage\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;StorageV2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;BlobStorage\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;FileStorage\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;BlockBlobStorage\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;StorageV2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Choose a kind of storage account\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;variables\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;iacVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;undefined\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;rgName\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[resourceGroup().name]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;rgLocation\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[resourceGroup().location]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;uniqueString\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[uniqueString(subscription().id, resourceGroup().id)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;storageAccountAffix\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[concat(replace(variables(\u0026#39;rgName\u0026#39;), \u0026#39;-\u0026#39;, \u0026#39;\u0026#39;), parameters(\u0026#39;purpose\u0026#39;))]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;storageAccountName\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[toLower(substring(replace(concat(variables(\u0026#39;storageAccountAffix\u0026#39;), variables(\u0026#39;uniqueString\u0026#39;)), \u0026#39;-\u0026#39;, \u0026#39;\u0026#39;), 0, 23) )]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;resources\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;comments\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;~~ Storage Account  ~~\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Storage/storageAccounts\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;apiVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;2018-07-01\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[variables(\u0026#39;storageAccountName\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;sku\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[parameters(\u0026#39;resilience\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;tier\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[parameters(\u0026#39;tier\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;kind\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[parameters(\u0026#39;kind\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;location\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[variables(\u0026#39;rgLocation\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;tags\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;IaCVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[variables(\u0026#39;iacVersion\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;ConfigVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[parameters(\u0026#39;configVersion\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;scale\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;properties\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;supportsHttpsTrafficOnly\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;encryption\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;services\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;file\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"nt\"\u003e\u0026#34;keyType\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Account\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"nt\"\u003e\u0026#34;enabled\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;blob\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"nt\"\u003e\u0026#34;keyType\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Account\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"nt\"\u003e\u0026#34;enabled\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;keySource\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Storage\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;accessTier\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[if(equals(parameters(\u0026#39;kind\u0026#39;), \u0026#39;Storage\u0026#39;), json(\u0026#39;null\u0026#39;),\u0026#39;Hot\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;dependsOn\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;outputs\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;storageId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[resourceId(\u0026#39;Microsoft.Storage/storageAccounts\u0026#39;, variables(\u0026#39;storageAccountName\u0026#39;))]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;storageAccountName\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[variables(\u0026#39;storageAccountName\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"the-change-set\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  The Change Set\n\u003c/h2\u003e\n\u003cp\u003eAnd using our new \u003ccode\u003eunion\u003c/code\u003e we can resolve the puzzle with 3 simple changes\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003eTo the \u003ccode\u003eparameter\u003c/code\u003e we add a new object\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;tagValues\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;object\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;Dept\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Undefined\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;Environment\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Development\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003cspan class=\"err\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the \u003ccode\u003evariables\u003c/code\u003e we can define our default tags\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;defaultTag\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;IaCVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[variables(\u0026#39;iacVersion\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;ConfigVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[parameters(\u0026#39;configVersion\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003cspan class=\"err\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAnd in the \u003ccode\u003eresource\u003c/code\u003e we can use the \u003ccode\u003eunion\u003c/code\u003e function to merge the objects together\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-4\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;tags\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[union(parameters(\u0026#39;tagValues\u0026#39;),variables(\u0026#39;defaultTag\u0026#39;))]\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"the-final-result\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  The Final Result\n\u003c/h2\u003e\n\u003cp\u003eThe final template will look as follows\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-5\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;$schema\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;contentVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;1.0.0.0\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;parameters\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;configVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;1.0.0.0\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;The version of the parameters file that holds the configuration.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;tagValues\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;object\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;Dept\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Undefined\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;Environment\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Development\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;purpose\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;allowedValues\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;diag\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;log\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;audit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;data\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;data\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;The designated purpose of the storage account. \u0026#39;diag\u0026#39; for diagnostics, \u0026#39;log\u0026#39; for logging, \u0026#39;audit\u0026#39; for auditing, \u0026#39;data\u0026#39; for data storage\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;resilience\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;allowedValues\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Standard_LRS\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Standard_ZRS\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Standard_GRS\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Standard_RAGRS\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Standard_LRS\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Choose a level of resilience and tier suitable for the purpose and region\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;tier\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;allowedValues\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Standard\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Premium\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Standard\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Choose tier, Standard or Premium.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;kind\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;allowedValues\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Storage\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;StorageV2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;BlobStorage\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;FileStorage\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;BlockBlobStorage\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;StorageV2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Choose a kind of storage account\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;variables\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;iacVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;undefined\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;defaultTag\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;IaCVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[variables(\u0026#39;iacVersion\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;ConfigVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[parameters(\u0026#39;configVersion\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;rgName\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[resourceGroup().name]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;rgLocation\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[resourceGroup().location]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;uniqueString\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[uniqueString(subscription().id, resourceGroup().id)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;storageAccountAffix\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[concat(replace(variables(\u0026#39;rgName\u0026#39;), \u0026#39;-\u0026#39;, \u0026#39;\u0026#39;), parameters(\u0026#39;purpose\u0026#39;))]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;storageAccountName\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[toLower(substring(replace(concat(variables(\u0026#39;storageAccountAffix\u0026#39;), variables(\u0026#39;uniqueString\u0026#39;)), \u0026#39;-\u0026#39;, \u0026#39;\u0026#39;), 0, 23) )]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;resources\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;comments\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;~~ Storage Account  ~~\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Storage/storageAccounts\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;apiVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;2018-07-01\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[variables(\u0026#39;storageAccountName\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;sku\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[parameters(\u0026#39;resilience\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;tier\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[parameters(\u0026#39;tier\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;kind\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[parameters(\u0026#39;kind\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;location\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[variables(\u0026#39;rgLocation\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;tags\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[union(parameters(\u0026#39;tagValues\u0026#39;),variables(\u0026#39;defaultTag\u0026#39;))]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;scale\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;properties\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;supportsHttpsTrafficOnly\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;encryption\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;services\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;file\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"nt\"\u003e\u0026#34;keyType\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Account\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"nt\"\u003e\u0026#34;enabled\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;blob\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"nt\"\u003e\u0026#34;keyType\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Account\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"nt\"\u003e\u0026#34;enabled\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;keySource\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Storage\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;accessTier\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[if(equals(parameters(\u0026#39;kind\u0026#39;), \u0026#39;Storage\u0026#39;), json(\u0026#39;null\u0026#39;),\u0026#39;Hot\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;dependsOn\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;outputs\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;storageId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[resourceId(\u0026#39;Microsoft.Storage/storageAccounts\u0026#39;, variables(\u0026#39;storageAccountName\u0026#39;))]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;storageAccountName\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[variables(\u0026#39;storageAccountName\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eNow, Feel the force, and see what you can create…\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Global Transit Network For Azure Virtual WAN",
        "date_published" : "2019-11-07T00:00:00Z",
        "date_modified" : "2019-11-07T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/global-transit-network-for-azure-virtual-wan/",
        "url" : "https://damianflynn.github.io/posts/global-transit-network-for-azure-virtual-wan/",
        "summary": " The Journey started with the concept of VNets, with work loads, and have evolved in the direction of Subnets, and quickly became a very complex list of islands which were disconnected\nSecurity Public Cloud SaaS, Internet Users Branch Offices Virtual WAN is a managed service\nManaged by Microsoft with global scale, and multplie endpoints. Each Hub can support 60Gb of connectivity; Including 20Gb of ExpressRoute. 20Gb of User VPN 20Gb Site to Site Supports 10K users per hub, 1000 sites per hub Transit Routing Cloud Network orchestration Automation large scale branch, SDWAN CPE connectivity Overview Simplified networking, ease of user operations, and cost savings:\n",
        "content_html" : "\u003chr\u003e\n\u003cp\u003eThe Journey started with the concept of VNets, with work loads, and have evolved in the direction of Subnets, and quickly became a very complex list of islands which were disconnected\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSecurity\u003c/li\u003e\n\u003cli\u003ePublic Cloud\u003c/li\u003e\n\u003cli\u003eSaaS, Internet\u003c/li\u003e\n\u003cli\u003eUsers\u003c/li\u003e\n\u003cli\u003eBranch Offices\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVirtual WAN is a managed service\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eManaged by Microsoft with global scale, and multplie endpoints.\u003c/li\u003e\n\u003cli\u003eEach Hub can support 60Gb of connectivity;\n\u003cul\u003e\n\u003cli\u003eIncluding 20Gb of ExpressRoute.\u003c/li\u003e\n\u003cli\u003e20Gb of User VPN\u003c/li\u003e\n\u003cli\u003e20Gb Site to Site\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSupports 10K users per hub, 1000 sites per hub\u003c/li\u003e\n\u003cli\u003eTransit Routing\u003c/li\u003e\n\u003cli\u003eCloud Network orchestration\n\u003cul\u003e\n\u003cli\u003eAutomation large scale branch, SDWAN CPE connectivity\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"overview\"\u003e\u003ca href=\"#overview\" class=\"header-mark\" aria-label=\"Header mark for 'Overview'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"overview\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Overview\n\u003c/h1\u003e\n\u003cp\u003eSimplified networking, ease of user operations, and cost savings:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAny-to-Any Connectivity\u003c/li\u003e\n\u003cli\u003eFull mesh hubs\u003c/li\u003e\n\u003cli\u003eBranch to Azure\u003c/li\u003e\n\u003cli\u003eBranch to Branch\u003c/li\u003e\n\u003cli\u003eVPN \u0026lt;-\u0026gt; ExpressRoute\u003c/li\u003e\n\u003cli\u003eUser VPN \u0026lt;-\u0026gt; Site\u003c/li\u003e\n\u003cli\u003evNet to vNet\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"whats-new\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Whats New\n\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAny-to-Any connectivity (Preview)\u003c/li\u003e\n\u003cli\u003eExpress Route , User VPN (Point to Site) GA\u003c/li\u003e\n\u003cli\u003eExpressRoute Encryption\u003c/li\u003e\n\u003cli\u003eMulti Link Azure Path Selection\u003c/li\u003e\n\u003cli\u003eCustom IPSec\u003c/li\u003e\n\u003cli\u003eConnect VNG VPN to Virtual WAN\u003c/li\u003e\n\u003cli\u003eAvailable in Gove Cloud and China\u003c/li\u003e\n\u003cli\u003eAzure Firewall integration (preview)\u003c/li\u003e\n\u003cli\u003ePricing\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"virtual-wan-types\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Virtual WAN Types\n\u003c/h2\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"basic\"\u003e\u003ca href=\"#basic\" class=\"header-mark\" aria-label=\"Header mark for 'Basic'\"\u003e\u003c/a\u003e\n    Basic\n\u003c/h3\u003e\n\n\u003cul\u003e\n\u003cli\u003eVPN Only\u003c/li\u003e\n\u003cli\u003eBranch to Azure\u003c/li\u003e\n\u003cli\u003eBranch to Branch\u003c/li\u003e\n\u003cli\u003eConnect VNET\u003c/li\u003e\n\u003cli\u003eDIY VNet Peering (VNet to VNet - no transitive)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"standard--basic-\"\u003e\u003ca href=\"#standard--basic-\" class=\"header-mark\" aria-label=\"Header mark for 'Standard = Basic \u0026#43;'\"\u003e\u003c/a\u003e\n    Standard = Basic +\n\u003c/h3\u003e\n\n\u003cp\u003eMulti Link Support in VPN Sites\u003c/p\u003e\n\u003cp\u003eDynamic traffic distribution across ISP at the branch site\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"express-route-standard-vwan\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Express Route (Standard VWan)\n\u003c/h2\u003e\n\u003cp\u003e20Gb aggregate throughput\u003c/p\u003e\n\u003cp\u003ePrivate Connectivity\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRequires Premium Circuit\u003c/li\u003e\n\u003cli\u003eIn Global Reach LocationExpressRoute VPN Interconnect\u003c/li\u003e\n\u003cli\u003eExpressRoute and Site-to-Site/Point-to-Site User VPNExpressRoute to ExpressRoute (Premium)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"express-route-encryption\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Express Route Encryption\n\u003c/h2\u003e\n\u003cp\u003eIPSec over Express Route (Azure Azure Private IP)\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"user-vpn\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  User VPN\n\u003c/h2\u003e\n\u003cp\u003eIPSec and OpenVPN support for up to 10K users\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"azure-firewall\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Azure Firewall\n\u003c/h2\u003e\n\u003cp\u003eFirewall in Virtual Hub\nCentralised Policy and route managmenet\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVNET to Inernet via Firewall\u003c/li\u003e\n\u003cli\u003eBranhc to ingtern via the firewall\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"msp-partner-program\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  MSP Partner Program\n\u003c/h2\u003e\n\u003cp\u003eAnnounced in July 2019 - in the Azure Marketplace\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"pricing\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Pricing\n\u003c/h2\u003e\n\u003cp\u003eConnections, Traffic, Aggregate via the Hubs\u003c/p\u003e\n\u003cp\u003eConnection Unit\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSite to Site VPN 0.05/hour\u003c/li\u003e\n\u003cli\u003eUser VPN 0.03/hour\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eScale Unit\n1 Unit = .361/h 500Mb\n1 ER Scale Unit = 0.42/hr 2Gbos\u003c/p\u003e\n\u003cp\u003eVirtual Hub\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBasic Hub - Free\u003c/li\u003e\n\u003cli\u003eStandard - 0.25/hour\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"zero-thrust-networking\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Zero Thrust Networking\n\u003c/h2\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"microsegmention\"\u003e\u003ca href=\"#microsegmention\" class=\"header-mark\" aria-label=\"Header mark for 'Microsegmention'\"\u003e\u003c/a\u003e\n    Microsegmention\n\u003c/h3\u003e\n\n\u003cul\u003e\n\u003cli\u003eSegment\nPrevent Lateral Movement and data exfilration\u003c/li\u003e\n\u003cli\u003eProtect\u003c/li\u003e\n\u003cli\u003eConnect\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eCloud Native Services, all software defined resources implement the Defence in Depth offer, the resources included are:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAzure Firewall\u003c/li\u003e\n\u003cli\u003eAzure Web Application Firewall\u003c/li\u003e\n\u003cli\u003eAzure Private Link\u003c/li\u003e\n\u003cli\u003eAzure DDoS Protection\u003c/li\u003e\n\u003cli\u003eVirtual Network\u003c/li\u003e\n\u003cli\u003eNetwork Security Groups\u003c/li\u003e\n\u003cli\u003eUser Defined Routes\u003c/li\u003e\n\u003cli\u003eLoad Balancer\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eNetwork Segmentation\nHost Based - With agent Installed\nHyperVistor Baed - VMWare NSX\nNetwork Based - Softwaew Defined Networking\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eSubscription\nLogic isolation of environemtn and all resoruces\u003c/li\u003e\n\u003cli\u003eVirtual Network\nIsoared and highly secure enviroonment to run virtual machines and applications\u003c/li\u003e\n\u003cli\u003eNetwork Security Group\nEnforce and control network traffic securitly rules to allow or deny traiffc fro a vnet or vm\u003c/li\u003e\n\u003cli\u003eWeb Application Firewall\nApplication specific network security\u003c/li\u003e\n\u003cli\u003eAzure Firewall\u003c/li\u003e\n\u003c/ol\u003e\n",
        "language": "en"
    },
    {
        "title" : "Managed Applications and Custom Resource Providers",
        "date_published" : "2019-11-07T00:00:00Z",
        "date_modified" : "2019-11-07T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/managed-applications-and-custom-resource-providers/",
        "url" : "https://damianflynn.github.io/posts/managed-applications-and-custom-resource-providers/",
        "summary": "Magnify the power of extending Azure platform by enabling customers and partners to easily bring in custom solutions to azure. These can be scoped for offering to our own enterprise, or just some selected customers; or even all customers.\nIgnite Session BRK3227 Presenters Gaurav Bhatnagar Evan Hissey Challenges with extending azure include many of the typical thoughts we face\nAs part of my deployment i need to do extra works Need to interface with external APIs, create users, storage tables, calling APIs external to Azure, while deploying ARM templates 200 Services, which service should i be selected, What is the correct VM SKU? what would be more cost efficient How do I integrate my service into Azure; What is the correct option to expose my service to my enterprise, or all azure users How do we deploy and offer? Deployment Script New resource type - Microsoft.Resources/DeploymentScripts\n",
        "content_html" : "\u003cp\u003eMagnify the power of extending Azure platform by enabling customers and partners to easily bring in custom solutions to azure. These can be scoped for offering to our own enterprise, or just some selected customers; or even all customers.\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eIgnite Session\u003c/th\u003e\n          \u003cth\u003eBRK3227\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePresenters\u003c/td\u003e\n          \u003ctd\u003eGaurav Bhatnagar\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eEvan Hissey\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eChallenges with extending azure include many of the typical thoughts we face\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAs part of my deployment i need to do extra works\u003c/li\u003e\n\u003cli\u003eNeed to interface with external APIs, create users, storage tables, calling APIs external to Azure, while deploying ARM templates\u003c/li\u003e\n\u003cli\u003e200 Services, which service should i be selected, What is the correct VM SKU? what would be more cost efficient\u003c/li\u003e\n\u003cli\u003eHow do I integrate my service into Azure; What is the correct option to expose my service to my enterprise, or all azure users\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"how-do-we-deploy-and-offer\"\u003e\u003ca href=\"#how-do-we-deploy-and-offer\" class=\"header-mark\" aria-label=\"Header mark for 'How do we deploy and offer?'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"how-do-we-deploy-and-offer\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  How do we deploy and offer?\n\u003c/h1\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"deployment-script\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Deployment Script\n\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eNew\u003c/strong\u003e resource type - \u003ccode\u003eMicrosoft.Resources/DeploymentScripts\u003c/code\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAllows running any scripts, Azure CLI, Powershell,\u003c/li\u003e\n\u003cli\u003eContent can be provided in line of using a URI\u003c/li\u003e\n\u003cli\u003eCan also execute \u003cem\u003ePre\u003c/em\u003e or \u003cem\u003ePost\u003c/em\u003e configuration on \u003cstrong\u003eARM\u003c/strong\u003e resources,\u003c/li\u003e\n\u003cli\u003eFire and forget resource type, configurable auto-deletion of this, should it be deleted, and if so when?\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"azure-service-catalog\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Azure Service Catalog\n\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eService Catalog\u003c/strong\u003e blade: Enable applications development teams to be more successful with the right services and scope the selections offered\nUsed in conjunction with Policy and RBAC, supports the compliance with the organization standard. Customized the creation experience for services and solutions\u003c/p\u003e\n\u003cp\u003eApplications are managed by a Central IT / Support Team\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"custom-resource-providers\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Custom Resource Providers\n\u003c/h2\u003e\n\u003cp\u003eOrganizations want to extend ARM and Azure management to the services they user, both custom and 3rd party build.\nPartners want to extend their custom resources directly into Azure for their customers\nManaged app developers need to give some control to their custom resources, for example integrate a SaaS service in Azure, examples include DataDog or Service Now.\u003c/p\u003e\n\u003cp\u003eAny REST endpoint can be called from the new Custom Provider Endpoint.\u003c/p\u003e\n\u003cp\u003eAny API can be extended into Azure, with RBAC Policy, Activity Log etc.\nPartners can have full control with governances, policy and templates for these services\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eVSCode Managed Application extension is currently in Private Preview\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cp\u003eAzure Policy extension allows the ability to link the resource with the managed application, so that each time a new resource is deployed the managed application can process the details.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnabled management access out of the box,\u003c/li\u003e\n\u003cli\u003eEasy access to author, no code needed to extend azure\u003c/li\u003e\n\u003cli\u003eMonotised through the application lifecycle.\u003c/li\u003e\n\u003cli\u003eManaged application has full access to the target subscription when deployed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"partners---managed-applications-center\"\u003e\u003ca href=\"#partners---managed-applications-center\" class=\"header-mark\" aria-label=\"Header mark for 'Partners - Managed Applications Center'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"partners---managed-applications-center\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Partners - Managed Applications Center\n\u003c/h1\u003e\n\u003cp\u003eSee, manage, and deploy all instances of the applications which may be deployed, managed as scale across tenants.\u003c/p\u003e\n\u003cp\u003eCloud Partner portal, new offer under Managed Applications, new SKU.\u003c/p\u003e\n\u003cp\u003eInclude the packaged file for the Managed Application, with the tenant ID, and the view definitions.\u003c/p\u003e\n\u003cp\u003eDefine who will have access - reader, contributor, etc. - that can cross-tenant manage these services.\u003c/p\u003e\n\u003cp\u003eHow to bill, using a private preview (opened in December 2019) using customer metering that can be built on any measure; with price per unit, and amount offered as part of the base prices. Can be up to 18 line items for the application, with different prices by SKUs and users.Private Offers also supported for per-customer pricing.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"resource-providers\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Resource Providers\n\u003c/h2\u003e\n\u003cp\u003eBuilding a full-blown resource provider in Azure. Most powerful mechanism to deliver your service in Azure.\u003c/p\u003e\n\u003cp\u003e220+ RPs currently in Azure, first-party account for 90%\u003c/p\u003e\n\u003cp\u003eExpose resource types specific to your service, including CRUD, etc.\u003c/p\u003e\n\u003cp\u003eGet all the benefits of the ARM environment, including RBAC, Policy, etc.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"why\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Why?\n\u003c/h2\u003e\n\u003cp\u003eCustom use native Azure services AND partner Services.\u003c/p\u003e\n\u003cp\u003eHomogeneous experience across services\u003c/p\u003e\n\u003cp\u003eCapabilities parity across services and custom billing based on Azure billingLeverage Azure Arc to provide capabilities over resources on on-premises resources.\u003c/p\u003e\n\u003cp\u003eCustom views for the Custom resource providers\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Web Application Gateway",
        "date_published" : "2019-11-07T00:00:00Z",
        "date_modified" : "2019-11-07T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/web-application-gateway/",
        "url" : "https://damianflynn.github.io/posts/web-application-gateway/",
        "summary": "Delivering PaaS Services Privately on Azure VNets with Private Link\nIgnite Session: BRK3169 Presenter Amit Srivastava Mission Critical HTTP Applications, there are many things to consider\nPersonalised, Micro-Services, Rich Context…. To support this MS have a number of services i the Suite - Azure Frontdoor, Application Gateway, Azure CDN, Web Application Firewall, Azure Load Balancer, and Azure Traffic Manager\nAzure Application Gateway Regional Gateway as a service\n",
        "content_html" : "\u003cp\u003eDelivering PaaS Services Privately on Azure VNets with Private Link\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003cstrong\u003eIgnite Session:\u003c/strong\u003e\u003c/th\u003e\n          \u003cth\u003eBRK3169\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003ePresenter\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eAmit Srivastava\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eMission Critical HTTP Applications, there are many things to consider\u003c/p\u003e\n\u003cp\u003ePersonalised, Micro-Services, Rich Context…. To support this MS have a number of services i the Suite - Azure Frontdoor, Application Gateway, Azure CDN, Web Application Firewall, Azure Load Balancer, and Azure Traffic Manager\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"azure-application-gateway\"\u003e\u003ca href=\"#azure-application-gateway\" class=\"header-mark\" aria-label=\"Header mark for 'Azure Application Gateway'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"azure-application-gateway\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eAzure Application Gateway\u003c/strong\u003e\n\u003c/h1\u003e\n\u003cp\u003eRegional Gateway as a service\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003cstrong\u003eFeature\u003c/strong\u003e\u003c/th\u003e\n          \u003cth\u003e\u003cstrong\u003eDescription\u003c/strong\u003e\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePlatform managed\u003c/td\u003e\n          \u003ctd\u003eBuilt in high availability and scalability)\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eLayer 7 balancing\u003c/td\u003e\n          \u003ctd\u003eURL Path, Host based, round robin, session affinity, redirection\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eSecurity and SSL management\u003c/td\u003e\n          \u003ctd\u003eWAF, SSL Offload, SSL Re-Encryption, SSL Policy\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePublic or ILB\u003c/td\u003e\n          \u003ctd\u003ePublic, Internal or Both\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eFlexible backends\u003c/td\u003e\n          \u003ctd\u003eVMs, VMSS, AKS, Public IP, Cloud Services, ALB.ILB/ On-Premises\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eRich Diagnostics\u003c/td\u003e\n          \u003ctd\u003eAzure Monitor, Log analytics, Network Watched, RHC, Azure Security Center\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eStandard V2 SKU in GA, Currently Available in 26 regions, Builtin Zone Redundancy, Static VIP, HTTP Header/cookies insertion/modification\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIncreased scale limits 20 -\u0026gt; 100 Listeners\u003c/li\u003e\n\u003cli\u003eKey Vault integration and auto-renewal of SSL Certs\u003c/li\u003e\n\u003cli\u003eAKS ingress Controller\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"autoscaling-and-performance-improvements\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eAutoscaling and Performance Improvements\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eGrow and shrink based on app traffic requirements\u003c/li\u003e\n\u003cli\u003e5X better SSL offloads performance\u003c/li\u003e\n\u003cli\u003e500-50,000 connections/sec with RSA 2048 bit certs\u003c/li\u003e\n\u003cli\u003e30,000-3,000,000 persistent connections\u003c/li\u003e\n\u003cli\u003e2,500-250,000 reqs/sec\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"announcing-general-availability\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eAnnouncing General Availability:\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFrontend TLS cert integration with Azure Key Vault\u003c/li\u003e\n\u003cli\u003eUtilized user-assigned managed identity access control for key vault\u003c/li\u003e\n\u003cli\u003eUser Certificates or secrets on key vault\u003c/li\u003e\n\u003cli\u003ePolls every 4 hours to enable automatic cert renewal\u003c/li\u003e\n\u003cli\u003emanual override of specific certificate version retrieval\u003c/li\u003e\n\u003cli\u003eManipulate Request and Response headers \u0026amp; cookies\n\u003cul\u003e\n\u003cli\u003eStrip port from X-Forwarded-for header\u003c/li\u003e\n\u003cli\u003eAdd security headers like HSTS and X-XSS-Protection\u003c/li\u003e\n\u003cli\u003eCommon header manipulation ex HOST, SERVER\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"aks-ingress-control-using-application-gateways\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eAKS Ingress Control using Application Gateways\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeployed using Helm\u003c/li\u003e\n\u003cli\u003eUtilizes Pod-AAD for ARM authentication\u003c/li\u003e\n\u003cli\u003eTighter integration with AKS add on support coming\u003c/li\u003e\n\u003cli\u003eSupport URI path based, host based, SSL termination, SSL re-encryption, redirection, custom health probes, draining, cookie affinity\u003c/li\u003e\n\u003cli\u003eSupport for Lets Encrypt provide TLS certificates\u003c/li\u003e\n\u003cli\u003eWAF fully supported with custom listener policy\u003c/li\u003e\n\u003cli\u003eSupport for multiple AKS as backend\u003c/li\u003e\n\u003cli\u003eSupport for mixed mode - both AKS and other backend types on the same Application Gateway\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://aka.ms/appgwaks\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\u003cstrong\u003ehttp://aka.ms/appgwaks\u003c/strong\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"wild-card-listener\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eWild Card Listener\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Wildcard characters in the listener host name\u003c/li\u003e\n\u003cli\u003eSupport for * and ? Characters in host name\u003c/li\u003e\n\u003cli\u003eAssociated wildcard or SAN certificates the service HTTPS enabled domains\u003c/li\u003e\n\u003cli\u003eSend traffic to multiple tenant end points\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"diagnostics-and-logs-enhancements\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eDiagnostics and logs enhancements\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTLS Protocol\u003c/li\u003e\n\u003cli\u003eTLS Cipher\u003c/li\u003e\n\u003cli\u003eBackend target server\u003c/li\u003e\n\u003cli\u003ebackend response code\u003c/li\u003e\n\u003cli\u003ebackend latency\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"metrics\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eMetrics\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBackend response status code\u003c/li\u003e\n\u003cli\u003eRPS healthy nodes\u003c/li\u003e\n\u003cli\u003eEnd to End Latency\u003c/li\u003e\n\u003cli\u003eBackend Latency\u003c/li\u003e\n\u003cli\u003eBackend connect, first byte and last byte latency\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"app-monitor-insights-for-application-gateway\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eApp Monitor Insights for Application Gateway\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eSingle health and metic console for your entire cloud network No agent/configuration required\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"azure-waf---cloud-native-web-application-firewall\"\u003e\u003ca href=\"#azure-waf---cloud-native-web-application-firewall\" class=\"header-mark\" aria-label=\"Header mark for 'Azure WAF - Cloud Native WEB Application Firewall'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"azure-waf---cloud-native-web-application-firewall\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003eAzure WAF - Cloud Native WEB Application Firewall\u003c/strong\u003e\n\u003c/h1\u003e\n\u003cp\u003eUnified WAF offering to protect your apps at network edge or region uniformly\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"public-preview-announced\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  \u003cstrong\u003ePublic preview announced\u003c/strong\u003e\n\u003c/h2\u003e\n\u003cp\u003eMicrosoft threats intelligence\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eProtect agains automatic attacks\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eManaged good and bad bots with Azure BotManager Rule Set\u003c/li\u003e\n\u003cli\u003eData is refreshed daily\u003c/li\u003e\n\u003cli\u003eEasy to configure in WAF policy\u003c/li\u003e\n\u003cli\u003eHelps increase your applications performance, by stopping aggressive crawlers.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSite and URI path specific WAF Policies\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eCustomized WAF police at the region WAF\u003c/li\u003e\n\u003cli\u003eAssign different Policies to different sites\u003c/li\u003e\n\u003cli\u003eSite specific polices implies you can tune the WAF to suit the needs of each site independently\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGeo filtering on regional WAF\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eAllow or Block a list of countries,\u003c/li\u003e\n\u003cli\u003eSupport log mode\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRule Set for CRS 3.1 added (to be the default soon)\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eIntegration with Azure Sentinel\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePerformance and concurrency enhancements\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n",
        "language": "en"
    },
    {
        "title" : "Guacamole Azure Appliance",
        "date_published" : "2019-11-02T00:00:00Z",
        "date_modified" : "2019-11-02T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/guacamole-azure-appliance/",
        "url" : "https://damianflynn.github.io/posts/guacamole-azure-appliance/",
        "summary": "Apache Guacamole is a free and open source web application which lets you access your dashboard from anywhere using a modern web browser. It is a clientless remote desktop gateway which only requires Guacamole installed on a server and a web browser supporting HTML5.\nGuacamole is the best way to keep multiple instances accessible over the internet. Once you add an instance to Guacamole, you don’t need to remember the password as it can securely store the credentials. It also lets you share the desktops among other users in a group. Guacamole supports multiple connection methods such as SSH, Telnet, VNC, and RDP.\n",
        "content_html" : "\u003cp\u003eApache Guacamole is a free and open source web application which lets you access your dashboard from anywhere using a modern web browser. It is a clientless remote desktop gateway which only requires Guacamole installed on a server and a web browser supporting HTML5.\u003c/p\u003e\n\u003cp\u003eGuacamole is the best way to keep multiple instances accessible over the internet. Once you add an instance to Guacamole, you don’t need to remember the password as it can securely store the credentials. It also lets you share the desktops among other users in a group. Guacamole supports multiple connection methods such as SSH, Telnet, VNC, and RDP.\u003c/p\u003e\n\u003cp\u003eIn this tutorial, we will install Apache Guacamole on a Azure with an Ubuntu 16.04 instance.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"guacamole-server\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Guacamole Server\n\u003c/h2\u003e\n\u003cp\u003eGuacamole server consists of the native server-side libraries required to connect to the server and the \u003cstrong\u003eguacd\u003c/strong\u003e tool. \u003cstrong\u003eguacd\u003c/strong\u003e is the Guacamole proxy daemon which accepts the user’s connections and connects to the remote desktop on their behalf. Given below is the architecture of Guacamole System.\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/architecture_7280536289511354527.png\" width=\"300\" height=\"529\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eNote: It is required to compile and install the Guacamole server on the host machine, installing the binary is not possible for Guacamole server\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"server-install\"\u003e\u003ca href=\"#server-install\" class=\"header-mark\" aria-label=\"Header mark for 'Server Install'\"\u003e\u003c/a\u003e\n    Server Install\n\u003c/h3\u003e\n\n\u003cp\u003eDownload the Guacamole server source code files into the temporary directory.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e /tmp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget \u003cspan class=\"s2\"\u003e\u0026#34;http://apache.org/dyn/closer.cgi?action=download\u0026amp;filename=guacamole/0.9.14/source/guacamole-server-0.9.14.tar.gz\u0026#34;\u003c/span\u003e -O guacamole-server-0.9.14.tar.gz\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eExtract the source code archive.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etar xf guacamole-server-0.9.*.tar.gz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e guacamole-server-0.9.*\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eCompile and install the source code.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e./configure --with-init-dir\u003cspan class=\"o\"\u003e=\u003c/span\u003e/etc/init.d\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emakemake install\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThe installation will also set up an \u003ccode\u003einit\u003c/code\u003e script which can be used to manage the \u003ccode\u003eguacd\u003c/code\u003e daemon. Create the necessary links and cache for the shared libraries.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-4\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eldconfig\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eGuacamole server is now installed on your instance. Start the Guacamole proxy daemon and enable it to automatically start at boot time using the following commands.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-5\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl \u003cspan class=\"nb\"\u003eenable\u003c/span\u003e guacd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl start guacd\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eYou can check the status of the service by running.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-6\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl status guacd\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"guacamole-client\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Guacamole Client\n\u003c/h2\u003e\n\u003cp\u003eGuacamole client is Java based web application which contains all the Java and JavaScript code required for running the user interface of Guacamole. It ultimately creates a web application which connects to the \u003ccode\u003eguacd\u003c/code\u003e daemon running in the background using Guacamole protocol. In the foreground, it renders the remote desktop interface using HTML5 on the web browser to the authorized users.\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eUnlike Guacamole server, Guacamole client is not required to be compiled and install from source. Cross-platform Guacamole client binary is available to download and install.\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"apache-tomcat-install\"\u003e\u003ca href=\"#apache-tomcat-install\" class=\"header-mark\" aria-label=\"Header mark for 'Apache Tomcat Install'\"\u003e\u003c/a\u003e\n    Apache Tomcat Install\n\u003c/h3\u003e\n\n\u003cp\u003eGuacamole binary requires a Java web server to run. In this tutorial, we will install Apache Tomcat 7 or 8 to run the Guacamole binary file.\u003c/p\u003e\n\u003cp\u003eInstall Java 8 runtime on your server, installing JDK is not required since we do not need to compile any Java code.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-7\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eyum -y install java-1.8.0-openjdk.x86_64\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eCreate a new group and user for Tomcat installation. Running Tomcat server with an unprivileged user is recommended for security reasons.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-8\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egroupadd tomcat\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euseradd -M -s /bin/nologin -g tomcat -d /opt/tomcat tomcat\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eDownload latest Tomcat server of version 8.5 from Apache mirror.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-9\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget http://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.28/bin/apache-tomcat-8.5.28.tar.gz\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eExtract the archive into /opt/tomcat directory.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-10\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir /opt/tomcat\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etar xvf apache-tomcat-8*.tar.gz -C /opt/tomcat --strip-components\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eProvide appropriate permissions and ownership to Tomcat server files.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-11\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e /opt/tomcat\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echgrp -R tomcat /opt/tomcat\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echmod -R g+r conf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echmod g+x conf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echown -R tomcat webapps/ work/ temp/ logs/\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eCreate a new systemd service file for managing Tomcat server.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-12\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enano /etc/systemd/system/tomcat.service\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003ePopulate the file with the following configuration.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003etext\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-13\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e[Unit]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eDescription=Apache Tomcat Web Application Container\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAfter=syslog.target network.target\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e[Service]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eType=forking\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eEnvironment=JAVA_HOME=/usr/lib/jvm/jre\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eEnvironment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eEnvironment=CATALINA_HOME=/opt/tomcat\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eEnvironment=CATALINA_BASE=/opt/tomcat\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eEnvironment=\u0026#39;CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eEnvironment=\u0026#39;JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eExecStart=/opt/tomcat/bin/startup.sh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eExecStop=/bin/kill -15 $MAINPID\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUser=tomcat\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGroup=tomca\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etUMask=0007\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eRestartSec=10\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eRestart=always\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e[Install]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWantedBy=multi-user.target\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eStart the Tomcat server and enable it to automatically start at boot time.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-14\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl start tomcat\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl \u003cspan class=\"nb\"\u003eenable\u003c/span\u003e tomcat\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eYou can check if Tomcat is running by going to http://your-server-ip:8080 using your favourite web browser. You should see the default Tomcat page. If you are getting some error, then make sure that port “8080” is allowed in Security group rules.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"install-guacamole-client\"\u003e\u003ca href=\"#install-guacamole-client\" class=\"header-mark\" aria-label=\"Header mark for 'Install Guacamole Client'\"\u003e\u003c/a\u003e\n    Install Guacamole Client\n\u003c/h3\u003e\n\n\u003cp\u003eSince we have installed the Tomcat server, download the Guacamole client binary file using the following command.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-15\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget \u003cspan class=\"s2\"\u003e\u0026#34;http://apache.org/dyn/closer.cgi?action=download\u0026amp;filename=guacamole/0.9.14/binary/guacamole-0.9.14.war\u0026#34;\u003c/span\u003e -O guacamole-0.9.14.war\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eMove the Guacamole client file to the Tomcat’s webapps directory.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-16\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emv guacamole-0.9.14.war /opt/tomcat/webapps/guacamole.war\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eRestart the Tomcat server.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-17\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl restart tomcat\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eGuacamole client is now installed on your server, you can check if Guacamole client is working by going to \u003ccode\u003ehttp://your-server-ip:8080/guacamole\u003c/code\u003e  using your favourite browser. You should see Guacamole login interface. You will not be able to log in yet as we have not configured authentication yet.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"setting-up-authentication\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Setting Up Authentication\n\u003c/h2\u003e\n\u003cp\u003eGuacamole client supports multiple authentication mechanisms such as file-based auth, database auth, OAuth, LDAP etc. In this section of the tutorial, we will configure database based authentication using MySQL database server.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"local-authentication\"\u003e\u003ca href=\"#local-authentication\" class=\"header-mark\" aria-label=\"Header mark for 'Local Authentication'\"\u003e\u003c/a\u003e\n    Local Authentication\n\u003c/h3\u003e\n\n\u003cp\u003eMySQL database will be used to store the authentication and other data. Since we do not require high performance and scalability which ApasaraDB provides, we will install MySQL server on the same instance.\u003c/p\u003e\n\u003cp\u003eInstall MariaDB server which is an open source fork of MySQL.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-18\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eyum -y install mariadb mariadb-server\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eStart the MariaDB server and enable it to automatically start at boot time.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-19\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl start mariadb\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl \u003cspan class=\"nb\"\u003eenable\u003c/span\u003e mariadb\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eSet a password for the MySQL root user and secure the server instance by removing the test database and user.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-20\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emysql_secure_installation\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eNow login to your MySQL shell using the root user and the password you just created.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-21\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emysql -u root -p\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eRun the following queries to create a new database named guacdb along with guacdb-user having full access to the database. Please change StrongPassword to a very strong password.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003esql\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-22\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eCREATE\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003eDATABASE\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"n\"\u003eguacdb\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"nb\"\u003eCHARACTER\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003eSET\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"n\"\u003eutf8\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003eCOLLATE\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"n\"\u003eutf8_general_ci\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003eCREATE\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003eUSER\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;guacdb-user\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e@\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;localhost\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"n\"\u003eIDENTIFIED\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003eBY\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;StrongPassword\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003eGRANT\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003eALL\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003ePRIVILEGES\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003eON\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"n\"\u003eguacdb\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003eTO\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;guacdb-user\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e@\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;localhost\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"n\"\u003eFLUSH\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"k\"\u003ePRIVILEGES\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"n\"\u003eEXIT\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"configure-guacamole\"\u003e\u003ca href=\"#configure-guacamole\" class=\"header-mark\" aria-label=\"Header mark for 'Configure Guacamole'\"\u003e\u003c/a\u003e\n    Configure Guacamole\n\u003c/h3\u003e\n\n\u003cp\u003eNow that our database server is running, we need to install the MySQL connector and Guacamole JDBC auth plugin. Create the new directories to store the plugins.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-23\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir -p /etc/guacamole/\u003cspan class=\"o\"\u003e{\u003c/span\u003eextensions,lib\u003cspan class=\"o\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eDownload the MySQL connector extension from MySQL site.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-24\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e /tmp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.45.tar.gz\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eExtract and move the MySQL connector into \u003ccode\u003e/etc/guacamole/lib.\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-25\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etar xf mysql-connector-java-5.1.45.tar.gz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emv mysql-connector-java-5.*/mysql-connector-java-5.*.jar /etc/guacamole/lib/\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eDownload the Guacamole JDBC authentication extension from Apache Guacamole site.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-26\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e /tmp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget \u003cspan class=\"s2\"\u003e\u0026#34;http://apache.org/dyn/closer.cgi?action=download\u0026amp;filename=guacamole/0.9.14/binary/guacamole-auth-jdbc-0.9.14.tar.gz\u0026#34;\u003c/span\u003e -O guacamole-auth-jdbc-0.9.14.tar.gz\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eExtract the archive and move the extension to \u003ccode\u003e/etc/guacamole/extensions\u003c/code\u003e directory.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-27\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etar xf guacamole-auth-jdbc-0.9.14.tar.gz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emv guacamole-auth-jdbc-0.9*/mysql/guacamole-auth-jdbc-mysql-0.9*.jar /etc/guacamole/extensions/\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eSince we have already created the database and database user, we can proceed to create the database schema and import the initial data. The schema is shipped along with the JDBC extension.\u003c/p\u003e\n\u003cp\u003eImport the SQL schema and initial data into the \u003ccode\u003eguacdb\u003c/code\u003e database using the following command. Provide the password of the MySQL root user when prompted.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-28\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e guacamole-auth-jdbc-0.9*/mysql/schema\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecat *.sql \u003cspan class=\"p\"\u003e|\u003c/span\u003e mysql -u root -p guacdb\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eCreate a new configuration file for Apache Guacamole so it can override the default configuration.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-29\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enano /etc/guacamole/guacamole.properties\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003ePopulate the file with the following configuration. Make sure to edit the StrongPassword with the actual password of guacdb-user.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003etext\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-30\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# MySQL properties\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emysql-hostname: localhost\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emysql-port: 3306\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emysql-database: guacdb\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emysql-username: guacdb-user\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emysql-password: StrongPassword\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emysql-default-max-connections-per-user: 0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emysql-default-max-group-connections-per-user: 0\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eSet \u003ccode\u003eGUACAMOLE_HOME\u003c/code\u003e environment variable so that the Guacamole Server can read the configuration file and the extensions.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-31\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;export GUACAMOLE_HOME=/etc/guacamole\u0026#34;\u003c/span\u003e \u0026gt;\u0026gt; ~/.bash_profile\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003esource\u003c/span\u003e ~/.bash_profile\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eDisable SELinux as it causes errors when running Guacamole.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-32\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esed -i \u003cspan class=\"s1\"\u003e\u0026#39;s/enforcing/disabled/g\u0026#39;\u003c/span\u003e /etc/selinux/config\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esetenforce \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eRestart Guacamole proxy daemon and Tomcat server so that the new configuration can take effect.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-33\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl restart guacd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl restart tomcat\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eGuacamole Client authentication is now configured on your server. You can check if you can log in by going to \u003ccode\u003ehttp://your-server-ip:8080/guacamole\u003c/code\u003e using your favourite browser. Log in using the default administrator user \u003cstrong\u003eguacadmin\u003c/strong\u003e and password \u003cstrong\u003eguacadmin\u003c/strong\u003e.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"setting-up-nginx-reverse-proxy\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Setting up Nginx Reverse Proxy\n\u003c/h2\u003e\n\u003cp\u003eSetting up a reverse proxy secured with SSL is recommended to encrypt the data exchanged between the browser and the Guacamole server. This will also map a domain name to your server so you won’t need to remember the IP address of the server.\u003c/p\u003e\n\u003cp\u003eInstall Nginx web server.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-34\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eyum -y install nginx\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eStart the Nginx web server and enable it to automatically start at boot time.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-35\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl start nginx\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl \u003cspan class=\"nb\"\u003eenable\u003c/span\u003e nginx\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"ssl-certificate\"\u003e\u003ca href=\"#ssl-certificate\" class=\"header-mark\" aria-label=\"Header mark for 'SSL Certificate'\"\u003e\u003c/a\u003e\n    SSL Certificate\n\u003c/h3\u003e\n\n\u003cp\u003eIn this tutorial, we will use the certificates generated with Let’s Encrypt certificate authority. If you wish to use more production friendly certificates, you can purchase commercial certificates from Alibaba Cloud.\u003c/p\u003e\n\u003cp\u003eDownload and install Certbot. Certbot is an official client application for Let’s Encrypt SSL generation.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-36\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget https://dl.eff.org/certbot-auto -O /usr/bin/certbot\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echmod a+x /usr/bin/certbot\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eNote: Before requesting SSL certificates, make sure that the domain you are using is pointed towards the IP address of the instance. If not, make an “A” type record in DNS management panel and point the domain or subdomain to the public IP address of your instance and wait for the DNS to propagate.\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cp\u003eGenerate Let’s Encrypt SSL certificates for your domain.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-37\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecertbot certonly --webroot -w /usr/share/nginx/html -d guac.example.com\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eReplace all occurrences of \u003cem\u003eguac.example.com\u003c/em\u003e with your actual domain name. The above command will ask you for your email to send you renewal notices. If the certificates are generated successfully, you should get following output.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-38\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eIMPORTANT NOTES:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e - Congratulations! Your certificate and chain have been saved at:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   /etc/letsencrypt/live/guac.example.com/fullchain.pem   Your key file has been saved at:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   /etc/letsencrypt/live/guac.example.com/privkey.pem   Your cert will expire on 2018-06-05. To obtain a new or tweaked\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   version of this certificate in the future, simply run certbot\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   again. To non-interactively renew *all* of your certificates, run\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"s2\"\u003e\u0026#34;certbot renew\u0026#34;\u003c/span\u003e  ...\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"auto-renew-certificate\"\u003e\u003ca href=\"#auto-renew-certificate\" class=\"header-mark\" aria-label=\"Header mark for 'Auto-Renew Certificate'\"\u003e\u003c/a\u003e\n    Auto-Renew Certificate\n\u003c/h3\u003e\n\n\u003cp\u003eCreate a cron job to renew the certificates as Let’s Encrypt certificates are expired in every three months.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-39\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e{\u003c/span\u003e crontab -l\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;36 2 * * * /usr/bin/certbot renew --post-hook \u0026#34;systemctl reload nginx\u0026#34;\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"o\"\u003e}\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e crontab -\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThe above command will run the renewal command every day at 2.36 AM. If the certificates are due for expiry it will automatically renew them.\u003c/p\u003e\n\u003cp\u003eCreate a new server block configuration file for Guacamole web application reverse proxy.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-40\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enano /etc/nginx/conf.d/guacamole.conf\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003ePopulate the file with the following configuration. Replace the example domain name with the actual one. Also, make sure that the path to the Let’s Encrypt SSL certificate and the private key is correct.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003etext\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-41\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eserver {\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    listen 80;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    server_name guac.example.com;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    return 301 https://$host$request_uri;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eserver {\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    listen 443 ssl http2;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    server_name guac.example.com;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    root html;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    index index.html index.htm;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ssl on;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ssl_certificate         /etc/letsencrypt/live/guac.example.com/fullchain.pem;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ssl_certificate_key     /etc/letsencrypt/live/guac.example.com/privkey.pem;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ssl_session_cache    shared:SSL:10m;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ssl_session_timeout    1440m;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ssl_prefer_server_ciphers on;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    add_header Strict-Transport-Security \u0026#34;max-age=31536000; includeSubdomains;\u0026#34;;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    access_log  /var/log/nginx/guacamole.access.log;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    location / {\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    proxy_pass http://localhost:8080/guacamole/;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    proxy_buffering off;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    proxy_http_version 1.1;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    proxy_set_header Upgrade $http_upgrade;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    proxy_set_header Connection $http_connection;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    proxy_cookie_path /guacamole/ /;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eCheck the Nginx configuration for errors.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-42\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enginx -t\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eYou should see the following output if the configuration is error free.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-43\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enginx: the configuration file /etc/nginx/nginx.conf syntax is ok\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enginx: configuration file /etc/nginx/nginx.conf \u003cspan class=\"nb\"\u003etest\u003c/span\u003e is successful\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eRestart Nginx web server to implement the changes in the configuration.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-44\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl restart nginx\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eNow you can go to \u003ca href=\"https://guac.example.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehttps://guac.example.com\u003c/a\u003e to access the Guacamole dashboard. The connections to the server and the browser are also secured with SSL.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"connecting-first-client\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Connecting First Client\n\u003c/h2\u003e\n\u003cp\u003eGuacamole server is now ready and working. You can add as many remote servers as you want. It can connect to the remote clients using SSH, Telnet, RDP, and VNC. To verify if it can connect to the remote server, let’s add our first SSH based connection.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"change-default-password\"\u003e\u003ca href=\"#change-default-password\" class=\"header-mark\" aria-label=\"Header mark for 'Change Default Password'\"\u003e\u003c/a\u003e\n    Change Default Password\n\u003c/h3\u003e\n\n\u003cp\u003eBefore proceeding further, let’s change the password of the default “guacamole” user. Login with default administrator user \u003ccode\u003eguacadmin\u003c/code\u003e and password \u003ccode\u003eguacadmin\u003c/code\u003e and go to the \u003cstrong\u003ePreferences\u003c/strong\u003e tab. Change the default password from this tab.\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/guacamole-settings1_14585798994110376926.png\" width=\"700\" height=\"347\" alt=\"Setting the Password\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"add-ssh-connection\"\u003e\u003ca href=\"#add-ssh-connection\" class=\"header-mark\" aria-label=\"Header mark for 'Add SSH Connection'\"\u003e\u003c/a\u003e\n    Add SSH Connection\n\u003c/h3\u003e\n\n\u003cp\u003eTo add a new connection, go to “Connections” tab and click on “Add new Connection” button. Provide a name for the connection and choose the protocol from drop down. Since I am connecting to the Guacamole server via SSH, I am selecting “SSH”.\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/guacamole-settings2_13913573746791156478.png\" width=\"554\" height=\"157\" alt=\"Enabling SSH as the connection type premitted\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003cp\u003eIn “Parameters” provide the hostname of the target server and port. You also use “localhost” for connecting the same server. Provide the username and password, if connecting through private key than provide the contents of the private key. You can also configure the display, such as color scheme and fonts etc. Once you are done, click on “Save” button.\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/guacamole-settings3_5357578022507100000.png\" width=\"700\" height=\"695\" alt=\"Setup of the permitted connection parameters\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"test-connection\"\u003e\u003ca href=\"#test-connection\" class=\"header-mark\" aria-label=\"Header mark for 'Test Connection'\"\u003e\u003c/a\u003e\n    Test Connection\n\u003c/h3\u003e\n\n\u003cp\u003eTo connect to the SSH server you just added, go to the dashboard and it will automatically try to connect to the SSH when there is only a single connection is available. Once you are connected, you should see the following interface.\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/guacamole-settings4_13947662704960485628.png\" width=\"700\" height=\"283\" alt=\"HTML Connection to SSH via Guacamole\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003cp\u003eSimilarly, you can add more SSH clients and graphical dashboards using various connection methods. The remote connections you want to add are not required to have either of Guacamole Server or Client, you can directly add them. Once you add the remote servers in Guacamole, you will only need a web browser to access them from anywhere in the world.\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "CBus MQTT Bridge on Raspberry PI",
        "date_published" : "2019-10-10T00:00:00Z",
        "date_modified" : "2019-10-10T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/cbus-mqtt-bridge-on-raspberry-pi/",
        "url" : "https://damianflynn.github.io/posts/cbus-mqtt-bridge-on-raspberry-pi/",
        "summary": " Turn back to 2007; My wife and I built our home, integrating many smart technologies, including the Clipsal C-Bus lighting system. This solution is classified as a Prosumer technology, and is designed to integrate into whole house automation systems.\nThe C-Bus system implements however a propriatory technology, and utilizes a communication protocol which is not ‘open source’; however, accepting a licence agreement will permit access to this protocol for creating an programming interface.\n",
        "content_html" : "\u003chr\u003e\n\u003cp\u003eTurn back to 2007; My wife and I built our home, integrating many smart technologies, including the Clipsal C-Bus lighting system. This solution is classified as a Prosumer technology, and is designed to integrate into whole house automation systems.\u003c/p\u003e\n\u003cp\u003eThe C-Bus system implements however a propriatory technology, and utilizes a communication protocol which is not ‘open source’; however, accepting a licence agreement will permit access to this protocol for creating an programming interface.\u003c/p\u003e\n\u003cp\u003eTo simplify (arguable) the process of integrating with the CBus environment Clipsal released a Bridge solution which enables a TCP interface using a special Java application called ‘C-GATE’.\u003c/p\u003e\n\u003cp\u003eUsing a Raspberry Pi, with a USB to RS-232 cable, which is then connected to a Clipsal interface called the \u003cem\u003eSerial PCI Module\u003c/em\u003e,\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"prerequisites\"\u003e\u003ca href=\"#prerequisites\" class=\"header-mark\" aria-label=\"Header mark for 'Prerequisites'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"prerequisites\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Prerequisites\n\u003c/h1\u003e\n\u003cp\u003eDeploy the current relase of Rasbian for your Pi.\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eUpdate: Jan 2021 - Currently using Rasbian 2021-01-11\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cp\u003eOnce the Pi have been configured and added to the network, we can connect via SSH, and begin installing the pre-requisites for our gateway.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Serial 2 Socket Build Tools\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get install git build-essential autotools-dev devscripts libssl-dev\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Java 8 Runtime for CGate\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get installopenjdk-8-jdk\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Node and NPM for CGateWeb\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get installnode npm\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"tcp-to-serial-bridge\"\u003e\u003ca href=\"#tcp-to-serial-bridge\" class=\"header-mark\" aria-label=\"Header mark for 'TCP to Serial Bridge'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"tcp-to-serial-bridge\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  TCP to Serial Bridge\n\u003c/h1\u003e\n\u003cp\u003eConfiguring the CBus system over TCP however will not work with just C-Gate alone, we need to also establish a TCP connection directly to the \u003cem\u003eSerial PCI Module\u003c/em\u003e.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"serial-to-socket\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Serial To Socket\n\u003c/h2\u003e\n\u003cp\u003eThis requires that we compile and run a small \u003cem\u003eC\u003c/em\u003e application (Don’t worry, this is painless and fast); It took a lot of searching to find, posted the source to the following GIT repository; the application is called \u003cstrong\u003eser2sock\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003eHere’s the steps to get it set up:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone https://github.com/nutechsoftware/ser2sock.git\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e ser2sock\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e./configure --without-sslcc -o ser2sock ser2sock.c\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo mv ser2sock /usr/local/bin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e /usr/local/bin/ser2sock\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo chown -R pi:pi /usr/local/bin/ser2sock\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"running-as-a-service---systemd\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Running as a service - System.d\n\u003c/h2\u003e\n\u003cp\u003eThe source offers us a sample init script which we can use for starting the service. First we will place this in the SystemD folder, and then update it to match our requirements for C-Gate\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo cp ~/ser2sock/init/systemd/ser2sock.service /etc/systemd/system\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eUpdate the startup script, \u003ccode\u003e/etc/systemd/system/ser2sock.service\u003c/code\u003e to have the daemon auto-start with the required C-Gate port, which is TCP 10001, and the serial interface baud rate set to 9600.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-4\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003eUnit\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eDescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eProxy that allows tcp connections to serial ports\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eAfter\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003esyslog.target network.target\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003eService\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eType\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eforking\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eExecStart\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/usr/local/bin/ser2sock -p \u003cspan class=\"m\"\u003e10001\u003c/span\u003e -s /dev/ttyUSB0 -b \u003cspan class=\"m\"\u003e9600\u003c/span\u003e -d\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eExecReload\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/bin/kill -HUP \u003cspan class=\"nv\"\u003e$MAINPID\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003eInstall\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eWantedBy\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003emulti-user.target\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThen activate using:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-5\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl \u003cspan class=\"nb\"\u003eenable\u003c/span\u003e ser2sock.service\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl start ser2sock.service\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"installing-c-gate\"\u003e\u003ca href=\"#installing-c-gate\" class=\"header-mark\" aria-label=\"Header mark for 'Installing C-Gate'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"installing-c-gate\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Installing C-Gate\n\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"https://updates.clipsal.com/ClipsalSoftwareDownload/mainsite/cis/technical/CGate/cgate-2.11.4_3251.zip\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eDownload\u003c/a\u003e the current software release of C-Gate off the clipsal website and unzipped the files into \u003ccode\u003e/usr/local/bin/cgate.\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-6\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e ~\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget https://updates.clipsal.com/ClipsalSoftwareDownload/mainsite/cis/technical/CGate/cgate-2.11.4_3251.zip\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eunzip cgate-*.zip\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo mv cgate /usr/local/bin\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"running-c-gate-as-service---systemd\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Running C-Gate as Service - System.d\n\u003c/h2\u003e\n\u003cp\u003eAdding the following ‘system.d’ startup script, to have the daemon auto-start with the operating system \u003ccode\u003e/etc/systemd/system/cgate.service\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-7\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003eUnit\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eDescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eClipsal CBUS Gateway\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eAfter\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003esyslog.target network.target\u003cspan class=\"o\"\u003e[\u003c/span\u003eService\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eExecStart\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/usr/bin/java -Djava.awt.headless\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nb\"\u003etrue\u003c/span\u003e -jar -noverify /usr/local/bin/cgate/cgate.jar\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eRestart\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ealways\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eUser\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eroot\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eGroup\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eroot\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eEnvironment\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003ePATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/usr/bin:/usr/local/bin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eWorkingDirectory\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/usr/local/bin/cgate/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003eInstall\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eWantedBy\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003emulti-user.target\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThen activate using\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-8\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl \u003cspan class=\"nb\"\u003eenable\u003c/span\u003e cgate.service\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl start cgate.service\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"c-gate-access-control\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  C-Gate Access Control\n\u003c/h2\u003e\n\u003cp\u003eWe must configure the C-Gate service to allow remote connections from machines on the network by editing the access control file \u003ccode\u003enano /usr/local/bin/cgate/config/access.txt\u003c/code\u003e; adding a line, providing the ip address of the remote system. In the example I am allowing the network 172.16.0.0/23 or the IP’s in the range of 172.16.0.0 to 172.16.255.255\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-9\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;remote 172.16.255.255 Program\u0026#34;\u003c/span\u003e \u0026gt;\u0026gt; /usr/local/bin/cgate/config/access.tx\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eSave, then restart cgate:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-10\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl restart cgate.service\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"c-gate-auto-connect\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  C-Gate Auto-Connect\n\u003c/h2\u003e\n\u003cp\u003eEdit the file \u003ccode\u003e/usr/local/bin/cgate/config/C-gateConfig.txt\u003c/code\u003e. Set the \u003cstrong\u003eproject.default\u003c/strong\u003e and \u003cstrong\u003eproject.start\u003c/strong\u003e lines to the name of the C-Gate Project.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"cgate-mqtt\"\u003e\u003ca href=\"#cgate-mqtt\" class=\"header-mark\" aria-label=\"Header mark for 'CGate MQTT'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"cgate-mqtt\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  CGate MQTT\n\u003c/h1\u003e\n\u003cp\u003eMQTT interface for C-Bus lighting written in Node.js\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-11\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e /usr/local/bin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo git clone https://github.com/the1laz/cgateweb.git\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e cgateweb\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enpm install\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo nano settings.js\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003ePut in your settings.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-12\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo cp cgateweb.service /etc/systemd/system\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl \u003cspan class=\"nb\"\u003eenable\u003c/span\u003e cgateweb\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl start cgateweb\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n",
        "language": "en"
    },
    {
        "title" : "Configuration the Ubiquity EdgeRouter with WireGuard",
        "date_published" : "2019-10-05T00:00:00Z",
        "date_modified" : "2019-10-05T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/configuration-the-ubiquity-edgerouter-with-wireguard/",
        "url" : "https://damianflynn.github.io/posts/configuration-the-ubiquity-edgerouter-with-wireguard/",
        "summary": " Virtual Private Networks are unmissable; however with many states now banning and actively blocking these tunnels the search for an alternative approach is appropriate, if we are to protect our identity and intellectual property.\nOne technology which claims to have fantastic throughput when compared to the stable IPSEC solutions, and based on benchmarks I have calculated leaves OpenVPN protocols in the dust, Wireguard positions itself as an in-kernel VPN solution which is very easy to implement and highly secure.\n",
        "content_html" : "\u003chr\u003e\n\u003cp\u003eVirtual Private Networks are unmissable; however with many states now banning and actively blocking these tunnels the search for an alternative approach is appropriate, if we are to protect our identity and intellectual property.\u003c/p\u003e\n\u003cp\u003eOne technology which claims to have fantastic throughput when compared to the stable IPSEC solutions, and based on benchmarks I have calculated leaves OpenVPN protocols in the dust, Wireguard positions itself as an in-kernel VPN solution which is very easy to implement and highly secure.\u003c/p\u003e\n\u003cp\u003eThis post will attempt to address the first challenge of implementing the technology, and later we can run our own benchmarks to see how in reality performance measures up.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"network-overview\"\u003e\u003ca href=\"#network-overview\" class=\"header-mark\" aria-label=\"Header mark for 'Network Overview'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"network-overview\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Network Overview\n\u003c/h1\u003e\n\u003cp\u003eThe Environment I will implement will contain two endpoints, both of which are directly connected to the public internet.\u003c/p\u003e\n\u003cp\u003eThe following table, defines the configuration points of the environment\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003c/th\u003e\n          \u003cth\u003eServer\u003c/th\u003e\n          \u003cth\u003eRouter\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eRole\u003c/td\u003e\n          \u003ctd\u003eServer\u003c/td\u003e\n          \u003ctd\u003eClient\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eNickname\u003c/td\u003e\n          \u003ctd\u003eAzure VM\u003c/td\u003e\n          \u003ctd\u003eEdgeRouter\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eEndpoint\u003c/td\u003e\n          \u003ctd\u003eUbuntu 16.04\u003c/td\u003e\n          \u003ctd\u003eEdgeRouter X\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eLocation\u003c/td\u003e\n          \u003ctd\u003eAzure - US West 2\u003c/td\u003e\n          \u003ctd\u003eHome - Ireland\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eDevice DNS Alias\u003c/td\u003e\n          \u003ctd\u003evpn-useast.diginerve.net\u003c/td\u003e\n          \u003ctd\u003egateway.deercrest.info\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eDevice IP\u003c/td\u003e\n          \u003ctd\u003e40.71.229.107\u003c/td\u003e\n          \u003ctd\u003e88.81.97.90\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eWireGuard UDP Port\u003c/td\u003e\n          \u003ctd\u003e51820\u003c/td\u003e\n          \u003ctd\u003e51820\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eNetwork CIDR\u003c/td\u003e\n          \u003ctd\u003e192.168.192.0/24\u003c/td\u003e\n          \u003ctd\u003e172.16.1.0/24\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eDevice IP\u003c/td\u003e\n          \u003ctd\u003e192.168.192.4\u003c/td\u003e\n          \u003ctd\u003e172.16.1.1\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eTunnel IP\u003c/td\u003e\n          \u003ctd\u003e192.168.2.1/24\u003c/td\u003e\n          \u003ctd\u003e192.168.2.2/24\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eInterface\u003c/td\u003e\n          \u003ctd\u003ewg0\u003c/td\u003e\n          \u003ctd\u003ewg0\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eWG IP\u003c/td\u003e\n          \u003ctd\u003e10.64.0.1\u003c/td\u003e\n          \u003ctd\u003e10.64.0.2\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"node-installation\"\u003e\u003ca href=\"#node-installation\" class=\"header-mark\" aria-label=\"Header mark for 'Node Installation'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"node-installation\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Node Installation\n\u003c/h1\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"ubuntu-1604\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Ubuntu 16.04\n\u003c/h2\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"azure\"\u003e\u003ca href=\"#azure\" class=\"header-mark\" aria-label=\"Header mark for 'Azure'\"\u003e\u003c/a\u003e\n    Azure\n\u003c/h3\u003e\n\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazResourceGroup\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;USEast_VPNGateway\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazLocation\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;eastus\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# VNET supports 32 subnets from 192.168.192.0 - 192.168.199.255\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazVnetName\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;USEast_Networks\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazVnetPrefix\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;192.168.192.0/21\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Allocating the first /24 subnet for the VPNGateway\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazGWSubnetName\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;USEast_VPNGateway\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazGWSubnetPrefix\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;192.168.192.0/24\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Define the Gateways WAN Interface\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazGWWanNicName\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;USEast_VPNGateway_WAN\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazGWWanNicPrivateIp\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;192.168.192.4\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazGWWanNicPublicIpName\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;USEast_VPNGateway_WAN_PublicIP\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazGWWanNicPublicIpDNS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;useast-gw\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Define the Gateway VM\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazGWVmName\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Gateway-USEast\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazGWVmSize\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Standard_A1_v2\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazGWVmUsername\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;damian\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create a resource group.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaz group create \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --name \u003cspan class=\"nv\"\u003e$azResourceGroup\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --location \u003cspan class=\"nv\"\u003e$azLocation\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create a virtual network with one subnet\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaz network vnet create \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --name \u003cspan class=\"nv\"\u003e$azVnetName\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --resource-group \u003cspan class=\"nv\"\u003e$azResourceGroup\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --location \u003cspan class=\"nv\"\u003e$azLocation\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --address-prefix \u003cspan class=\"nv\"\u003e$azVnetPrefix\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --subnet-name \u003cspan class=\"nv\"\u003e$azGWSubnetName\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --subnet-prefix \u003cspan class=\"nv\"\u003e$azGWSubnetPrefix\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create a public IP address resource\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Append the --allocation-method Static option for the allocation to be static\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# The DnsName must be unique within the\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaz network public-ip create \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --name \u003cspan class=\"nv\"\u003e$azGWWanNicPublicIpName\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --resource-group \u003cspan class=\"nv\"\u003e$azResourceGroup\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --location \u003cspan class=\"nv\"\u003e$azLocation\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --dns-name \u003cspan class=\"nv\"\u003e$azGWWanNicPublicIpDNS\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --allocation-method Static\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create a network interface connected to the VNet \u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# with a static private IP address and associate the \u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# public IP address# resource to the NIC.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaz network nic create \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --name \u003cspan class=\"nv\"\u003e$azGWWanNicName\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --resource-group \u003cspan class=\"nv\"\u003e$azResourceGroup\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --location \u003cspan class=\"nv\"\u003e$azLocation\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --subnet \u003cspan class=\"nv\"\u003e$azGWSubnetName\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --vnet-name \u003cspan class=\"nv\"\u003e$azVnetName\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --private-ip-address \u003cspan class=\"nv\"\u003e$azGWWanNicPrivateIp\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --public-ip-address \u003cspan class=\"nv\"\u003e$azGWWanNicPublicIpName\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create a new VM with the NIC\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaz vm create \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --name \u003cspan class=\"nv\"\u003e$azGWVmName\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --resource-group \u003cspan class=\"nv\"\u003e$azResourceGroup\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --location \u003cspan class=\"nv\"\u003e$azLocation\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --image UbuntuLTS \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --size \u003cspan class=\"nv\"\u003e$azGWVmSize\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --nics \u003cspan class=\"nv\"\u003e$azGWWanNicName\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --authentication-type password \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --admin-username \u003cspan class=\"nv\"\u003e$azGWVmUsername\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"wireguard-installation\"\u003e\u003ca href=\"#wireguard-installation\" class=\"header-mark\" aria-label=\"Header mark for 'WireGuard Installation'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"wireguard-installation\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  WireGuard Installation\n\u003c/h1\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"ubuntu-1604-1\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Ubuntu 16.04\n\u003c/h2\u003e\n\u003cp\u003eInstalling is quick and simple, we just need to register the repository, add its content to our catalog index, and install the two packages we require. The following script acomplishs this for us\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eapt-get update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eapt-get upgrade\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eadd-apt-repository ppa:wireguard/wireguard\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eapt-get update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eapt-get install wireguard-dkms wireguard-tools\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"edgerouter\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  EdgeRouter\n\u003c/h2\u003e\n\u003cp\u003eDownload the corresponding package from \u003ccode\u003ehttps://github.com/Lochnair/vyatta-wireguard/releases\u003c/code\u003e.\nYou will need to select the version based on your hardware\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eRelease Name\u003c/th\u003e\n          \u003cth\u003eDevice Models\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eocteon\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eERL, ER\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eralink\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eER X\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eYou can choose to upload to the routing, or ssh login routing, sudo su to root , the implementation of similar orders\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl https://github.com/Lochnair/vyatta-wireguard/releases/download/0.0.20170612-2/wireguard-octeon-0.0.20170612-2.deb -o wireguard-octeon-0.0.20170612-2.deb\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAfter the download is complete, you can install the package with the following command\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-4\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo dpkg -i ./wireguard-ralink-\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eRELEASE\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e.deb\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"configuration\"\u003e\u003ca href=\"#configuration\" class=\"header-mark\" aria-label=\"Header mark for 'Configuration'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"configuration\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Configuration\n\u003c/h1\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"virtual-interfaces\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Virtual Interfaces\n\u003c/h2\u003e\n\u003cp\u003eCreating the Virtual Interface which will be the endpoint for out Point to Point tunnel is not complex. Convention with Wireguard is to name the interface starting with \u003ccode\u003ewg0\u003c/code\u003e.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"ubuntu-1604-2\"\u003e\u003ca href=\"#ubuntu-1604-2\" class=\"header-mark\" aria-label=\"Header mark for 'Ubuntu 16.04'\"\u003e\u003c/a\u003e\n    Ubuntu 16.04\n\u003c/h3\u003e\n\n\u003cp\u003eIn the Linux shell, we can add the new interface by leveraging the \u003ccode\u003eip\u003c/code\u003e tools\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-5\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eip link add dev wg0 \u003cspan class=\"nb\"\u003etype\u003c/span\u003e wireguard\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eip address add dev wg0 192.168.2.1/24\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"edgerouter-1\"\u003e\u003ca href=\"#edgerouter-1\" class=\"header-mark\" aria-label=\"Header mark for 'EdgeRouter'\"\u003e\u003c/a\u003e\n    EdgeRouter\n\u003c/h3\u003e\n\n\u003cp\u003eIn configuration mode, we can leverage the \u003ccode\u003eset interfaces\u003c/code\u003e command to establish the interface\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-6\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econfigureset interfaces wireguard wg0 address 192.168.2.2/24\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"security-keys\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Security Keys\n\u003c/h2\u003e\n\u003cp\u003eWireGuard is a asymmetric cryptography key-based VPN solution. We therefore need to generate a key pair for each node . We do this by creating a private key and then deriving a public key from it. Wireguard’s own userspace tool \u003ccode\u003ewg\u003c/code\u003e assists with this task.\u003c/p\u003e\n\u003cp\u003eLets create the key pair for the first node, which we will refer to as the \u003cem\u003eserver\u003c/em\u003e…\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-7\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewg genkey \u0026gt; server_private.key\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewg pubkey \u0026gt; server_public.key \u0026lt; server_private.key\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAnd, the second pair we need for the second node, which we can refer to as the \u003cem\u003erouter\u003c/em\u003e…\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-8\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewg genkey \u0026gt; router_private.key\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewg pubkey \u0026gt; router_public.key \u0026lt; router_private.key\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eImportant: For security we should be storing the key pair only on the same system on which it is used. If you created both key pairs on the same node, then ensure that you transfer the private key securely to the other node and remove it from original node.\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cp\u003eThis should leave us with two files for the \u003cem\u003eserver\u003c/em\u003e and another two files for the \u003cem\u003erouter\u003c/em\u003e. Make sure you don’t confuse these two pair’s! The tunnel won’t work if the private and public keys of the endpoints are not correctly distributed!\u003c/p\u003e\n\u003cp\u003eFor illustrative purposes, this is what the content of each of the Key files looks like\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eFile Name\u003c/th\u003e\n          \u003cth\u003eKey\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eserver_private.key\u003c/td\u003e\n          \u003ctd\u003eaFXnPHtYM1E4Zmx1HBYpqpTQvKHqXXHD4iy0IJ2wCVk=\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eserver_public.key\u003c/td\u003e\n          \u003ctd\u003e3cv0P5Q8o9rR4nyq3mx8iTid2CMjab4nrqbo5lgm4lc=\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003erouter_private.key\u003c/td\u003e\n          \u003ctd\u003e2JS5OtRG37AGs7+/srHPEc7L/aBNZFt6+1Sh2Z+FjUQ=\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003erouter_public.key\u003c/td\u003e\n          \u003ctd\u003eNkVVh4yt+ZO9FVgMtImHesXoWba1Wzrb5HXrvMg+rjY=\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"server-configuration\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Server Configuration\n\u003c/h2\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"ubuntu-1604-3\"\u003e\u003ca href=\"#ubuntu-1604-3\" class=\"header-mark\" aria-label=\"Header mark for 'Ubuntu 16.04'\"\u003e\u003c/a\u003e\n    Ubuntu 16.04\n\u003c/h3\u003e\n\n\u003cp\u003eCreate a configuration file named \u003ccode\u003ewireguard.conf\u003c/code\u003e and store it for example in \u003ccode\u003e\\etc\\wireguard\\\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003etext\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-9\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e[Interface]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eListenPort = 51820\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePrivateKey = \u0026#34;insert `server_private.key` content goes here\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e[Peer]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eEndpoint = ip:port of endpoint (88.81.97.90:51820)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePublicKey = \u0026#34;insert `router_public.key` content goes here\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAllowedIPs = 0.0.0.0/0\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eOnce defined, we can link the configuration to Wireguard, and then turn up the Virtual Interface\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-10\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewg setconf wg0 /etc/wireguard/wireguard.conf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eip link \u003cspan class=\"nb\"\u003eset\u003c/span\u003e up dev wg0\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"auto-load-on-server-restart\"\u003e\u003ca href=\"#auto-load-on-server-restart\" class=\"header-mark\" aria-label=\"Header mark for 'Auto Load on Server Restart'\"\u003e\u003c/a\u003e\n    Auto Load on Server Restart\n\u003c/h3\u003e\n\n\u003cp\u003eUsing the \u003ccode\u003erc.local\u003c/code\u003e file, we can have the tunnel endpoint automatically created at system boot\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-11\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# /etc/rc.local\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Add, Configure and establish the Wireguard Tunnel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eip link add dev wg0 \u003cspan class=\"nb\"\u003etype\u003c/span\u003e wireguard\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eip address add dev wg0 192.168.2.1/24\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewg setconf wg0 /etc/wireguard/wireguard.conf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eip link \u003cspan class=\"nb\"\u003eset\u003c/span\u003e up dev wg0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Lets Configure the Firewall next...\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"edgerouter-2\"\u003e\u003ca href=\"#edgerouter-2\" class=\"header-mark\" aria-label=\"Header mark for 'EdgeRouter'\"\u003e\u003c/a\u003e\n    EdgeRouter\n\u003c/h3\u003e\n\n\u003cp\u003eOn the edge router, we can complete the configuration as follows\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-12\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e interfaces wireguard wg0 listen-port \u003cspan class=\"m\"\u003e51820\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e interfaces wireguard wg0 route-allowed-ips \u003cspan class=\"nb\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e interfaces wireguard wg0 private-key /config/auth/router_private.key\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e interfaces wireguard wg0 peer \u003cspan class=\"s2\"\u003e\u0026#34;insert `server_public.key` content goes here\u0026#34;\u003c/span\u003e description \u003cspan class=\"s2\"\u003e\u0026#34;insert \u0026#39;Nickname\u0026#39;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e interfaces wireguard wg0 peer \u003cspan class=\"s2\"\u003e\u0026#34;insert `server_public.key` content goes here\u0026#34;\u003c/span\u003e allowed-ips 0.0.0.0/0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e interfaces wireguard wg0 peer \u003cspan class=\"s2\"\u003e\u0026#34;insert `server_public.key` content goes here\u0026#34;\u003c/span\u003e endpoint ip:port of endpoint \u003cspan class=\"o\"\u003e(\u003c/span\u003e40.71.229.107:51820\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e interfaces wireguard wg0 peer \u003cspan class=\"s2\"\u003e\u0026#34;insert `server_public.key` content goes here\u0026#34;\u003c/span\u003e persistent-keepalive \u003cspan class=\"m\"\u003e25\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecommit\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esave\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"validation\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Validation\n\u003c/h2\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"server\"\u003e\u003ca href=\"#server\" class=\"header-mark\" aria-label=\"Header mark for 'Server'\"\u003e\u003c/a\u003e\n    Server\n\u003c/h3\u003e\n\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-13\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo wg\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einterface: wg0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  public key: \u003cspan class=\"nv\"\u003e3cv0P5Q8o9rR4nyq3mx8iTid2CMjab4nrqbo5lgm4lc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  private key: \u003cspan class=\"o\"\u003e(\u003c/span\u003ehidden\u003cspan class=\"o\"\u003e)\u003c/span\u003e  listening port: \u003cspan class=\"m\"\u003e51820\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epeer: NkVVh4yt+ZO9FVgMtImHesXoWba1Wzrb5HXrvMg+rjY\u003cspan class=\"o\"\u003e=\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  endpoint: 88.81.97.90:51820\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  allowed ips: 0.0.0.0/0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  latest handshake: \u003cspan class=\"m\"\u003e36\u003c/span\u003e seconds ago\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  transfer: \u003cspan class=\"m\"\u003e572\u003c/span\u003e B received, \u003cspan class=\"m\"\u003e156\u003c/span\u003e B sent\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"router\"\u003e\u003ca href=\"#router\" class=\"header-mark\" aria-label=\"Header mark for 'Router'\"\u003e\u003c/a\u003e\n    Router\n\u003c/h3\u003e\n\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-14\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo wg\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einterface: wg0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  public key: NkVVh4yt+ZO9FVgMtImHesXoWba1Wzrb5HXrvMg+rjY\u003cspan class=\"o\"\u003e=\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  private key: \u003cspan class=\"o\"\u003e(\u003c/span\u003ehidden\u003cspan class=\"o\"\u003e)\u003c/span\u003e  listening port: \u003cspan class=\"m\"\u003e51820\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epeer: \u003cspan class=\"nv\"\u003e3cv0P5Q8o9rR4nyq3mx8iTid2CMjab4nrqbo5lgm4lc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  endpoint: 40.71.229.107:51820\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  allowed ips: 0.0.0.0/0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  latest handshake: \u003cspan class=\"m\"\u003e5\u003c/span\u003e seconds ago\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  transfer: \u003cspan class=\"m\"\u003e92\u003c/span\u003e B received, \u003cspan class=\"m\"\u003e452\u003c/span\u003e B sent\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"perfomance-testing\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Perfomance Testing\n\u003c/h2\u003e\n\u003cp\u003eMy router is connected to a 30Mb/30Mb service hosted by Westnet, and my average speedtest.net results at the time of running this next test was as follows\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eDirection\u003c/th\u003e\n          \u003cth\u003eBandwidth\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eDownload\u003c/td\u003e\n          \u003ctd\u003e28.36Mb\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eUpload\u003c/td\u003e\n          \u003ctd\u003e28.83Mb\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"server-1\"\u003e\u003ca href=\"#server-1\" class=\"header-mark\" aria-label=\"Header mark for 'Server'\"\u003e\u003c/a\u003e\n    Server\n\u003c/h3\u003e\n\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-15\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ sudo apt install iperf3\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ iperf3 -s\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-----------------------------------------------------------Server listening on \u003cspan class=\"m\"\u003e5201\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-----------------------------------------------------------\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"router-1\"\u003e\u003ca href=\"#router-1\" class=\"header-mark\" aria-label=\"Header mark for 'Router'\"\u003e\u003c/a\u003e\n    Router\n\u003c/h3\u003e\n\n\u003cp\u003eThe iPref3 application is pre-installed with the EdgeRouter so we just need to run the tool, which should automatically connect with the server we have listening\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-16\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ iperf3 -c 192.168.2.1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eConnecting to host 192.168.2.1, port \u003cspan class=\"m\"\u003e5201\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  4\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"nb\"\u003elocal\u003c/span\u003e 192.168.2.2 port \u003cspan class=\"m\"\u003e53159\u003c/span\u003e connected to 192.168.2.1 port \u003cspan class=\"m\"\u003e5201\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e ID\u003cspan class=\"o\"\u003e]\u003c/span\u003e Interval           Transfer     Bandwidth       Retr\u003cspan class=\"o\"\u003e[\u003c/span\u003e  4\u003cspan class=\"o\"\u003e]\u003c/span\u003e   0.00-1.09   sec   \u003cspan class=\"m\"\u003e768\u003c/span\u003e KBytes  5.75 Mbits/sec    \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  4\u003cspan class=\"o\"\u003e]\u003c/span\u003e   1.09-2.10   sec  1.12 MBytes  9.43 Mbits/sec    \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  4\u003cspan class=\"o\"\u003e]\u003c/span\u003e   2.10-3.10   sec  1.75 MBytes  14.7 Mbits/sec    \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  4\u003cspan class=\"o\"\u003e]\u003c/span\u003e   3.10-4.10   sec  2.88 MBytes  24.1 Mbits/sec    \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  4\u003cspan class=\"o\"\u003e]\u003c/span\u003e   4.10-5.09   sec  4.38 MBytes  36.7 Mbits/sec    \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  4\u003cspan class=\"o\"\u003e]\u003c/span\u003e   5.09-6.10   sec  3.38 MBytes  28.3 Mbits/sec  \u003cspan class=\"m\"\u003e171\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  4\u003cspan class=\"o\"\u003e]\u003c/span\u003e   6.10-7.09   sec  2.50 MBytes  21.0 Mbits/sec    \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  4\u003cspan class=\"o\"\u003e]\u003c/span\u003e   7.09-8.09   sec  2.88 MBytes  24.1 Mbits/sec    \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  4\u003cspan class=\"o\"\u003e]\u003c/span\u003e   8.09-9.10   sec  3.00 MBytes  25.1 Mbits/sec    \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  4\u003cspan class=\"o\"\u003e]\u003c/span\u003e   9.10-10.09  sec  3.00 MBytes  25.2 Mbits/sec    \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- - - - - - - - - - - - - - - - - - - - - - - - -\u003cspan class=\"o\"\u003e[\u003c/span\u003e ID\u003cspan class=\"o\"\u003e]\u003c/span\u003e Interval           Transfer     Bandwidth       Retr\u003cspan class=\"o\"\u003e[\u003c/span\u003e  4\u003cspan class=\"o\"\u003e]\u003c/span\u003e   0.00-10.09  sec  25.6 MBytes  21.3 Mbits/sec  \u003cspan class=\"m\"\u003e171\u003c/span\u003e         sender\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  4\u003cspan class=\"o\"\u003e]\u003c/span\u003e   0.00-10.09  sec  24.4 MBytes  20.3 Mbits/sec              receiver\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiperf Done.\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThe report should also be presented in the console of the server, similar to the following\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-17\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAccepted connection from 192.168.2.2, port \u003cspan class=\"m\"\u003e53158\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  5\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"nb\"\u003elocal\u003c/span\u003e 192.168.2.1 port \u003cspan class=\"m\"\u003e5201\u003c/span\u003e connected to 192.168.2.2 port \u003cspan class=\"m\"\u003e53159\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e ID\u003cspan class=\"o\"\u003e]\u003c/span\u003e Interval           Transfer     Bandwidth\u003cspan class=\"o\"\u003e[\u003c/span\u003e  5\u003cspan class=\"o\"\u003e]\u003c/span\u003e   0.00-1.00   sec   \u003cspan class=\"m\"\u003e457\u003c/span\u003e KBytes  3.74 Mbits/sec\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  5\u003cspan class=\"o\"\u003e]\u003c/span\u003e   1.00-2.00   sec   \u003cspan class=\"m\"\u003e919\u003c/span\u003e KBytes  7.53 Mbits/sec\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  5\u003cspan class=\"o\"\u003e]\u003c/span\u003e   2.00-3.00   sec  1.59 MBytes  13.3 Mbits/sec\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  5\u003cspan class=\"o\"\u003e]\u003c/span\u003e   3.00-4.00   sec  2.46 MBytes  20.6 Mbits/sec\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  5\u003cspan class=\"o\"\u003e]\u003c/span\u003e   4.00-5.00   sec  3.78 MBytes  31.7 Mbits/sec\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  5\u003cspan class=\"o\"\u003e]\u003c/span\u003e   5.00-6.00   sec  3.19 MBytes  26.7 Mbits/sec\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  5\u003cspan class=\"o\"\u003e]\u003c/span\u003e   6.00-7.00   sec  2.61 MBytes  21.9 Mbits/sec\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  5\u003cspan class=\"o\"\u003e]\u003c/span\u003e   7.00-8.00   sec  2.87 MBytes  24.1 Mbits/sec\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  5\u003cspan class=\"o\"\u003e]\u003c/span\u003e   8.00-9.00   sec  3.00 MBytes  25.1 Mbits/sec\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  5\u003cspan class=\"o\"\u003e]\u003c/span\u003e   9.00-10.00  sec  3.01 MBytes  25.3 Mbits/sec\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  5\u003cspan class=\"o\"\u003e]\u003c/span\u003e  10.00-10.19  sec   \u003cspan class=\"m\"\u003e598\u003c/span\u003e KBytes  25.2 Mbits/sec\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- - - - - - - - - - - - - - - - - - - - - - - - -\u003cspan class=\"o\"\u003e[\u003c/span\u003e ID\u003cspan class=\"o\"\u003e]\u003c/span\u003e Interval           Transfer     Bandwidth       Retr\u003cspan class=\"o\"\u003e[\u003c/span\u003e  5\u003cspan class=\"o\"\u003e]\u003c/span\u003e   0.00-10.19  sec  25.6 MBytes  21.1 Mbits/sec  \u003cspan class=\"m\"\u003e171\u003c/span\u003e             sender\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e  5\u003cspan class=\"o\"\u003e]\u003c/span\u003e   0.00-10.19  sec  24.4 MBytes  20.1 Mbits/sec                  receiver\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"results\"\u003e\u003ca href=\"#results\" class=\"header-mark\" aria-label=\"Header mark for 'Results'\"\u003e\u003c/a\u003e\n    Results\n\u003c/h3\u003e\n\n\u003cp\u003eThe results of the test over the tunnel, when compared to my available bandwidth turns out.\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eDirection\u003c/th\u003e\n          \u003cth\u003eBandwidth\u003c/th\u003e\n          \u003cth\u003eTunnel\u003c/th\u003e\n          \u003cth\u003eEfficency\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eDownload\u003c/td\u003e\n          \u003ctd\u003e28.36Mb\u003c/td\u003e\n          \u003ctd\u003e20.3Mb\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e71.5%\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eUpload\u003c/td\u003e\n          \u003ctd\u003e28.83Mb\u003c/td\u003e\n          \u003ctd\u003e21.3Mb\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e73.8%\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eVery Impressive!\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"enable-ipv4-routing\"\u003e\u003ca href=\"#enable-ipv4-routing\" class=\"header-mark\" aria-label=\"Header mark for 'Enable IPv4 routing'\"\u003e\u003c/a\u003e\n    Enable IPv4 routing\n\u003c/h3\u003e\n\n\u003cp\u003eFirst make sure IP forwarding is enabled by adding the following to \u003ccode\u003e/etc/sysctl.conf\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003etext\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-18\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enet.ipv4.ip_forward=1\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eRun the following command to apply the above setting:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-19\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo sysctl -p\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"router-policy-based-routing\"\u003e\u003ca href=\"#router-policy-based-routing\" class=\"header-mark\" aria-label=\"Header mark for 'Router Policy Based Routing'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"router-policy-based-routing\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Router Policy Based Routing\n\u003c/h1\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"group-of-devices-to-route\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Group of devices to route\n\u003c/h2\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-20\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econfigureset firewall group address-group VPN_USEast address 172.16.1.197\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e firewall group address-group VPN_USEast address 172.16.1.198\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecommitexit\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"table-for-route\"\u003e\u003ca href=\"#table-for-route\" class=\"header-mark\" aria-label=\"Header mark for 'Table for route'\"\u003e\u003c/a\u003e\n    Table for route\n\u003c/h3\u003e\n\n\u003cp\u003eNext, the configuration is the route table.\n192.168.2.1 is wg0 network remote gateway address, wg0 local ip is 192.168.2.2, so do not need additional configuration 192.168.2.0/24 device routing.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-21\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econfigureset protocols static table \u003cspan class=\"m\"\u003e5\u003c/span\u003e route 0.0.0.0/0 next-hop 192.168.2.1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#set protocols static table 1 interface-route 0.0.0.0/0 next-hop-interface wg0commitexit\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-22\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eshow ip route table \u003cspan class=\"m\"\u003e5\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"define-a-modify-policy\"\u003e\u003ca href=\"#define-a-modify-policy\" class=\"header-mark\" aria-label=\"Header mark for 'Define a Modify Policy'\"\u003e\u003c/a\u003e\n    Define a Modify Policy\n\u003c/h3\u003e\n\n\u003cp\u003eThe firewall configuration is as follows\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-23\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econfigure\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e firewall modify VPN_USEast_ROUTE rule \u003cspan class=\"m\"\u003e10\u003c/span\u003e description \u003cspan class=\"s1\"\u003e\u0026#39;Traffic from VPN_USEast to wg0\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e firewall modify VPN_USEast_ROUTE rule \u003cspan class=\"m\"\u003e10\u003c/span\u003e \u003cspan class=\"nb\"\u003esource\u003c/span\u003e group address-group VPN_USEast\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e firewall modify VPN_USEast_ROUTE rule \u003cspan class=\"m\"\u003e10\u003c/span\u003e modify table \u003cspan class=\"m\"\u003e5\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"apply-the-policy-to-the-switch-interface\"\u003e\u003ca href=\"#apply-the-policy-to-the-switch-interface\" class=\"header-mark\" aria-label=\"Header mark for 'Apply the Policy to the Switch interface'\"\u003e\u003c/a\u003e\n    Apply the Policy to the Switch interface\n\u003c/h3\u003e\n\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-24\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e interfaces switch switch0 firewall in modify VPN_USEast_ROUTE\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"apply-the-policy\"\u003e\u003ca href=\"#apply-the-policy\" class=\"header-mark\" aria-label=\"Header mark for 'Apply the Policy'\"\u003e\u003c/a\u003e\n    Apply the Policy\n\u003c/h3\u003e\n\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-25\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e service nat rule \u003cspan class=\"m\"\u003e5003\u003c/span\u003e description VPN_USEast_MASQ\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e service nat rule \u003cspan class=\"m\"\u003e5003\u003c/span\u003e log disable\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e service nat rule \u003cspan class=\"m\"\u003e5003\u003c/span\u003e outbound-interface wg0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e service nat rule \u003cspan class=\"m\"\u003e5003\u003c/span\u003e \u003cspan class=\"nb\"\u003esource\u003c/span\u003e group address-group VPN_USEast\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e service nat rule \u003cspan class=\"m\"\u003e5003\u003c/span\u003e \u003cspan class=\"nb\"\u003etype\u003c/span\u003e masquerade\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"linux\"\u003e\u003ca href=\"#linux\" class=\"header-mark\" aria-label=\"Header mark for 'Linux'\"\u003e\u003c/a\u003e\n    Linux\n\u003c/h3\u003e\n\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eThis is to be removed\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-26\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo iptables -A FORWARD -i eth0 -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"installation\"\u003e\u003ca href=\"#installation\" class=\"header-mark\" aria-label=\"Header mark for 'Installation'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"installation\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Installation\n\u003c/h1\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"configuration-1\"\u003e\u003ca href=\"#configuration-1\" class=\"header-mark\" aria-label=\"Header mark for 'Configuration'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"configuration-1\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Configuration\n\u003c/h1\u003e\n\u003cp\u003eCopy the output of the last command down to the server\u003c/p\u003e\n\u003cp\u003eAfter configuring the device, configure the nat service\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-27\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econfigure\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e service nat rule \u003cspan class=\"m\"\u003e5032\u003c/span\u003e outbound-interface wg0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e service nat rule \u003cspan class=\"m\"\u003e5032\u003c/span\u003e \u003cspan class=\"nb\"\u003etype\u003c/span\u003e masquerade\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecommit\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esave\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThe rest is to configure the routing rules, and can refer to my\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"configuration-reference\"\u003e\u003ca href=\"#configuration-reference\" class=\"header-mark\" aria-label=\"Header mark for 'Configuration Reference'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"configuration-reference\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Configuration Reference\n\u003c/h1\u003e\n\u003cp\u003eA firewall is just a set of rules that get run over every packet that comes or goes through the device it’s running on. The rules look at things like which interface the packet is coming or going from, what ports it’s using, what protocols it’s using, the IPs involved, etc.. It uses the packet’s properties to determine some sort of action like dropping the packet, rewriting it, or accepting it. When all the conditions of a rule match a packet, the action is applied to that packet. In Linux, the de facto firewall program is called iptables. It’s been around for decades and is incredibly powerful. On the other hand it’s often criticized for being complex and unforgiving. Alternatives like the “uncomplicated firewall” (ufw) have sprung up to try and make firewall configuration easier, but under the hood all they are doing is writing iptables rules. I don’t think the basics of iptables are that complicated though if you just give it a chance. So let me explain how it works at a high level and I’ll demonstrate some basic rules that can lock down your router as well, if not better, than a commercial router.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"tables-and-chains\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Tables and Chains\n\u003c/h2\u003e\n\u003cp\u003eIptables works on these things called tables (obviously). There are 5 different tables it uses: raw, mangle, nat, filter, and security. Each of these tables are applied at a different stage of packet processing and so they can be used to achieve different things. This is just the basics though, so all we’re going to focus on are the nat and filter tables.\u003c/p\u003e\n\u003cp\u003eEach of these tables contain chains, which are just a list of rules. There are 5 default chains called, \u003cem\u003ePREROUTING\u003c/em\u003e, \u003cem\u003eINPUT\u003c/em\u003e, \u003cem\u003eFORWARD\u003c/em\u003e, \u003cem\u003eOUTPUT\u003c/em\u003e, and \u003cem\u003ePOSTROUTING\u003c/em\u003e. Not every chain is applicable in every table though. For example the nat table only uses \u003cem\u003ePREROUTING\u003c/em\u003e and \u003cem\u003ePOSTROUTING\u003c/em\u003e chains and the filter table only uses \u003cem\u003eINPUT\u003c/em\u003e, \u003cem\u003eFORWARD\u003c/em\u003e, and \u003cem\u003eOUTPUT\u003c/em\u003e chains. For now lets focus on \u003cem\u003eINPUT\u003c/em\u003e, \u003cem\u003eFORWARD\u003c/em\u003e, and \u003cem\u003eOUTPUT\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003eWhen a packet goes though the Linux network stack the chain of rules that get applied depends on where the packet is coming from and where it is going. If the packet is destined for the machine the firewall is running on, it would get run through the \u003cem\u003eINPUT\u003c/em\u003e chain (the packet is an input to this system). If it is destined for some other machine then it gets run through the \u003cem\u003eFORWARD\u003c/em\u003e table (the packet is being forwarded to another system). If the packet originated from the machine the firewall is running on it gets run through the \u003cem\u003eOUTPUT\u003c/em\u003e table (the packet is an output of this system).\u003c/p\u003e\n\u003cp\u003eLike I said before, each of these chains is just a list of rules. Once the appropriate chain is picked based on the packet’s source and destination the rules are run in order from the start of the list until a rule is matched. Each rule has a policy associated with it that says what to do with the packet if that rule is matched. The most common policies are \u003cem\u003eACCEPT\u003c/em\u003e and \u003cem\u003eDROP\u003c/em\u003e which allow the packet through the firewall or deny it respectively. There are a lot more policies that let you gracefully reject packets, jump around to other rule chains, and more, but again, this is just the basics.\u003c/p\u003e\n\u003cp\u003eSo what happens if no rules are matched? In fact this is what’s happening on your router right now. Since you haven’t added any rules there are no rules to match. Each chain has a default policy which says what to do if no rules are matched. By default the policy is \u003cem\u003eACCEPT\u003c/em\u003e. See:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-28\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; sudo iptables -LChain INPUT \u003cspan class=\"o\"\u003e(\u003c/span\u003epolicy ACCEPT\u003cspan class=\"o\"\u003e)\u003c/span\u003etarget     prot opt \u003cspan class=\"nb\"\u003esource\u003c/span\u003e               destination\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eChain FORWARD \u003cspan class=\"o\"\u003e(\u003c/span\u003epolicy ACCEPT\u003cspan class=\"o\"\u003e)\u003c/span\u003etarget     prot opt \u003cspan class=\"nb\"\u003esource\u003c/span\u003e               destination\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eChain OUTPUT \u003cspan class=\"o\"\u003e(\u003c/span\u003epolicy ACCEPT\u003cspan class=\"o\"\u003e)\u003c/span\u003etarget     prot opt \u003cspan class=\"nb\"\u003esource\u003c/span\u003e               destination\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThis command lists \u003cem\u003e(-L)\u003c/em\u003e the chains, rules, and default policies of an iptables table. By default it lists the filter table. To list a different table like nat you could add \u003ccode\u003e-t nat\u003c/code\u003e to the command. You can see for that each of the chains \u003cem\u003eINPUT\u003c/em\u003e, \u003cem\u003eFORWARD\u003c/em\u003e, and \u003cem\u003eOUTPUT\u003c/em\u003e the policy if no rules are matched is \u003cem\u003eACCEPT\u003c/em\u003e. This is what I mean by your router is not secure right now. It will literally accept anything, from anywhere, going to anywhere. If you don’t understand why this is bad for something connected to the public internet then you probably aren’t the type of person that should be building their own router.\u003c/p\u003e\n\u003cp\u003eA default \u003cem\u003eACCEPT\u003c/em\u003e policy is \u003cem\u003eOK\u003c/em\u003e for the \u003cem\u003eOUTPUT\u003c/em\u003e table. We’ll assume that the router hasn’t been hacked and any traffic it wants to send out to the world is acceptable. For the \u003cem\u003eINPUT\u003c/em\u003e and \u003cem\u003eFORWARD\u003c/em\u003e tables, which process packets from the outside world, you definitely want to change the default policy to \u003cem\u003eDROP\u003c/em\u003e.\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eWARNING: DO NOT DO THIS OVER SSH. IT WILL DROP YOUR SSH CONNECTION:\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-29\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; sudo iptables -P INPUT DROP\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; sudo iptables -P FORWARD DROP\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAnd see the change:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-30\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; sudo iptables -LChain INPUT \u003cspan class=\"o\"\u003e(\u003c/span\u003epolicy DROP\u003cspan class=\"o\"\u003e)\u003c/span\u003etarget     prot opt \u003cspan class=\"nb\"\u003esource\u003c/span\u003e               destination\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eChain FORWARD \u003cspan class=\"o\"\u003e(\u003c/span\u003epolicy DROP\u003cspan class=\"o\"\u003e)\u003c/span\u003etarget     prot opt \u003cspan class=\"nb\"\u003esource\u003c/span\u003e               destination\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eChain OUTPUT \u003cspan class=\"o\"\u003e(\u003c/span\u003epolicy ACCEPT\u003cspan class=\"o\"\u003e)\u003c/span\u003etarget     prot opt \u003cspan class=\"nb\"\u003esource\u003c/span\u003e               destination\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eOK now you’re safe from haxors. You’re router is dropping all your LAN traffic too though so you’re also kind of fucked. We’ll need to add some more rules to allow the traffic we actually want.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"adding-rules\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Adding Rules\n\u003c/h2\u003e\n\u003cp\u003eBy default iptables rules are not persistent. This is good because if you fuck something up you can just reboot the machine and everything will be fine. Once you’ve got a working set of rules though you’ll want them to be applied automatically at boot. There are some packages like \u003ccode\u003eiptables-persistent\u003c/code\u003e and other bullshit like that to do it for you, but for simple folk there’s \u003ccode\u003e/etc/rc.local\u003c/code\u003e. Just put your commands in there and they’ll get run on every boot.\u003c/p\u003e\n\u003cp\u003eOK, now for some rules. I highly recommend running these on the command line and testing everything works before putting them into \u003ccode\u003e/etc/rc.local\u003c/code\u003e if you’re doing this over SSH.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"input-chain-rules\"\u003e\u003ca href=\"#input-chain-rules\" class=\"header-mark\" aria-label=\"Header mark for 'Input Chain Rules'\"\u003e\u003c/a\u003e\n    Input Chain Rules\n\u003c/h3\u003e\n\n\u003cp\u003eFirst of all, let’s accept anything from the loopback interface:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-31\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; sudo iptables -A INPUT -i lo -j ACCEPT\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAnd lets also allow anything on the LAN to send traffic to the router itself:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-32\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; sudo iptables -A INPUT -i wg0 -j ACCEPT\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eYou should now be able to see these rules in the INPUT chain \u003cem\u003e(\u003cstrong\u003e\u003ccode\u003e-v\u003c/code\u003e\u003c/strong\u003e just enables verbose output to show the interface names the rule applies to)\u003c/em\u003e:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-33\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; sudo iptables -L -vChain INPUT \u003cspan class=\"o\"\u003e(\u003c/span\u003epolicy DROP \u003cspan class=\"m\"\u003e50250\u003c/span\u003e packets, 10M bytes\u003cspan class=\"o\"\u003e)\u003c/span\u003e pkts bytes target  prot opt in               out  \u003cspan class=\"nb\"\u003esource\u003c/span\u003e    destination\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1140K  199M ACCEPT  all  --  lo               any  anywhere  anywhere\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  14M 3023M ACCEPT  all  --  wg0  any  anywhere  anywhere\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e...\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThese rules go in the \u003cem\u003eINPUT\u003c/em\u003e chain because we want them to apply to traffic destined to the router itself.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003e-A\u003c/code\u003e just means append to the end of the current list of rules.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eRemember the rules are evaluated in order until a rule is matched so the order these things are inserted into the chain matters.\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003e-i\u003c/code\u003e option says to match this rule the packet must be coming from the \u003cstrong\u003ewg0 interface\u003c/strong\u003e \u003cem\u003e(which is my LAN interface)\u003c/em\u003e.\u003c/li\u003e\n\u003cli\u003eFinally the \u003ccode\u003e-j ACCEPT\u003c/code\u003e says the policy to apply is to accept the packet.\nPutting that all together we get “a packet from the LAN interface destined to the router should be accepted”.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eNext, let’s allow traffic from the WAN to the router. We don’t just want the router to accept any packets from the WAN though. It should only accept packets that are part of a connection the router itself initiated. This prevents any random person on the internet from sending traffic to the router, but still ensures the router can still receive responses from the internet when it wants to. Since iptables does connection tracking its simple to make a rule like this with just a few more options:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-34\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; sudo iptables -A INPUT -i eth0 -m conntrack \u003cspan class=\"se\"\u003e\\ \u003c/span\u003e       --ctstate ESTABLISHED,RELATED -j ACCEPT\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eMost of those options should make sense already, but let me explain the new ones: \u003ccode\u003e-m\u003c/code\u003e and \u003ccode\u003e--ctstate\u003c/code\u003e.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003em\u003c/strong\u003e option specifies a “match” to use. This is just some extra condition the packet must match for the rule to be applied. In this case we want to match on connection state so the conntrack matching extension is used.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ectstate\u003c/strong\u003e option says which types of connections should be matched. To allow traffic from connections initiated by the router the rule needs to match ESTABLISHED and RELATED packets. This means a packet will be accepted if it is part of an already established TCP connection, or if it is related to a TCP connection in the process of being set up (router sends SYN, the SYN/ACK the server responds with is a “related” packet).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"forward-chain-rules\"\u003e\u003ca href=\"#forward-chain-rules\" class=\"header-mark\" aria-label=\"Header mark for 'Forward Chain Rules'\"\u003e\u003c/a\u003e\n    Forward Chain Rules\n\u003c/h3\u003e\n\n\u003cp\u003eSo now we can send traffic from the LAN to the router, from the router to the LAN, and from the router to the WAN. But what about from the LAN to the WAN? For that we will need forwarding rules. Recall rules in the FORWARD table apply to packets from somewhere other than the router going to somewhere other than the router (neither source or destination IP is the router’s). The packets are just being forwarded through. The rules are very similar to the ones from before.\u003c/p\u003e\n\u003cp\u003eTo accept traffic being forwarded from the LAN to the WAN:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-35\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; sudo iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eIn other words “accept packets coming in the LAN interface and going out the WAN interface”. Just like the router, we should accept traffic from the WAN going to the LAN if, and only if, the LAN initiated the connection:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-36\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; sudo iptables -A FORWARD -i eth0 -o wg0 -m conntrack \u003cspan class=\"se\"\u003e\\ \u003c/span\u003e       --ctstate ESTABLISHED,RELATED -j ACCEPT\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAlrighty, that should do it for filter table rules. There’s still ony problem though. If a LAN device sends a packet to the WAN the source IP address will be a LAN address (something in the 192.168.0.0/24 space). These IPs are unrouteable on the public internet and will be dropped the second the packet leaves your house. Instead the router should change the source IP address on outgoing packets to its WAN IP. Then when a reply is received it should change the destination IP back to the LAN IP address and forward it along. This procedure is called Network Address Translation, aka NAT, and this is where the nat table comes into play.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"nat\"\u003e\u003ca href=\"#nat\" class=\"header-mark\" aria-label=\"Header mark for 'NAT'\"\u003e\u003c/a\u003e\n    NAT\n\u003c/h3\u003e\n\n\u003cp\u003eTo translate IP addresses between local addresses and publicly routable addresses, we’ll need to add some rules to the PREROUTING and POSTROUTING chains of the nat table. These chains allow you to modify packets when they’re received and as they are being transmitted respectively. So to translate LAN IP addresses to the router’s WAN IP address we will have to add a POSTROUTING rule that rewrites the address just before the packet is sent out. Fortunately, iptables has built in things to make this easy. There is a policy called MASQUERADE that will do all the translation for us. All we need to do is add a rule and iptables will take care of all the NAT rewriting on outgoing and incoming packets that match the rule.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-37\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eTo see that it worked you can add \u003ccode\u003e-t nat\u003c/code\u003e to the \u003ccode\u003eiptables -L\u003c/code\u003e command to see the nat table rules:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-38\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$\u0026gt; sudo iptables -t nat -L -vChain PREROUTING \u003cspan class=\"o\"\u003e(\u003c/span\u003epolicy ACCEPT \u003cspan class=\"m\"\u003e2130\u003c/span\u003e packets, 684K bytes\u003cspan class=\"o\"\u003e)\u003c/span\u003epkts bytes target prot opt in out \u003cspan class=\"nb\"\u003esource\u003c/span\u003e destination\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eChain INPUT \u003cspan class=\"o\"\u003e(\u003c/span\u003epolicy ACCEPT \u003cspan class=\"m\"\u003e1640\u003c/span\u003e packets, 661K bytes\u003cspan class=\"o\"\u003e)\u003c/span\u003epkts bytes target prot opt in out \u003cspan class=\"nb\"\u003esource\u003c/span\u003e destination\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eChain OUTPUT \u003cspan class=\"o\"\u003e(\u003c/span\u003epolicy ACCEPT \u003cspan class=\"m\"\u003e15342\u003c/span\u003e packets, 1363K bytes\u003cspan class=\"o\"\u003e)\u003c/span\u003epkts bytes target prot opt in out \u003cspan class=\"nb\"\u003esource\u003c/span\u003e destination\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eChain POSTROUTING \u003cspan class=\"o\"\u003e(\u003c/span\u003epolicy ACCEPT \u003cspan class=\"m\"\u003e15337\u003c/span\u003e packets, 1362K bytes\u003cspan class=\"o\"\u003e)\u003c/span\u003epkts bytes target     prot opt in  out   \u003cspan class=\"nb\"\u003esource\u003c/span\u003e   destination\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e1200\u003c/span\u003e \u003cspan class=\"m\"\u003e83980\u003c/span\u003e MASQUERADE all  --  any eth0  anywhere anywhere\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eBoom, that’s it, you should have a working router. Test things out and make sure everything is working properly. If so then make sure to add all the iptables rules to your \u003ccode\u003e/etc/rc.local\u003c/code\u003e so they will be added after every boot. The completed thing should look something like this:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-39\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# /etc/rc.local# Default policy to drop all incoming packets\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiptables -P INPUT DROP\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiptables -P FORWARD DROP\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Accept incoming packets from localhost and the LAN interface\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiptables -A INPUT -i lo -j ACCEPT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiptables -A INPUT -i wg0 -j ACCEPT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Accept incoming packets from the WAN if the router initiated# the connection\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiptables -A INPUT -i eth0 -m conntrack \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    --ctstate ESTABLISHED,RELATED -j ACCEPT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# We also need to accept SSH to this interface\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiptables -A INPUT -p tcp --dport \u003cspan class=\"m\"\u003e22\u003c/span\u003e -j ACCEPT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Forward LAN packets to the WAN\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiptables -A FORWARD -i wg0 -o eth0 -j ACCEPT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Forward WAN packets to the LAN if the LAN initiated the# connection\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiptables -A FORWARD -i eth0 -o wg0 -m conntrack \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e    --ctstate ESTABLISHED,RELATED -j ACCEPT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# NAT traffic going out the WAN interface\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# rc.local needs to exit with 0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eNow stop, and back things up. Unless you want to do all that configuration over if something goes awry it’s a good idea to copy all the configuration files somewhere safe.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"azure-hosting\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Azure Hosting\n\u003c/h2\u003e\n\u003cp\u003eIf you choose to host your Ubuntu Wireguard gateway in Azure, then the Azure virtual network will require the route tables to be modified to route the packets from the virtual network interface of the Ubuntu server correctly.\u003c/p\u003e\n\u003cp\u003eRecall that in our environment, we established a Wireguard tunnel between our Ubuntu server and Edgerouter, which is running as \u003cem\u003e192.168.2.0/24\u003c/em\u003e, with the remote network behind the Edgerouter been defined as \u003cem\u003e172.16.1.0/24\u003c/em\u003e.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"create-the-udr-for-the-back-end-subnet\"\u003e\u003ca href=\"#create-the-udr-for-the-back-end-subnet\" class=\"header-mark\" aria-label=\"Header mark for 'Create the UDR for the back-end subnet'\"\u003e\u003c/a\u003e\n    Create the UDR for the back-end subnet\n\u003c/h3\u003e\n\n\u003cp\u003eTo create the route table and route needed for the back-end subnet Run the following command\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-40\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazVnetUDR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;USEast_UDR\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaz network route-table create --name \u003cspan class=\"nv\"\u003e$azVnetUDR\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --resource-group \u003cspan class=\"nv\"\u003e$azResourceGroup\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --location \u003cspan class=\"nv\"\u003e$azLocation\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eRun the following command to create a route in the route table to send all traffic destined to the Edgerouter subnet (172.16.1.0/24) to the Gateway VM (192.168.192.4):\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-41\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazVnetUDRRoutes\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;USEast-Gateway-Routes\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaz network route-table route create --name \u003cspan class=\"nv\"\u003e$azVnetUDRRoutes\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --resource-group \u003cspan class=\"nv\"\u003e$azResourceGroup\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --route-table-name \u003cspan class=\"nv\"\u003e$azVnetUDR\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --address-prefix 192.168.192.0/24 \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --next-hop-type VirtualAppliance \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --next-hop-ip-address 192.168.192.4\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eRun the following logging command to create a route in the route table to send all traffic destined to the Edgerouter subnet (192.168.2.0/24) to the Gateway VM (192.168.192.4):\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-42\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eazVnetUDRRoutes\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;USEast-Gateway-NAT-Routes\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaz network route-table route create --name \u003cspan class=\"nv\"\u003e$azVnetUDRRoutes\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --resource-group \u003cspan class=\"nv\"\u003e$azResourceGroup\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --route-table-name \u003cspan class=\"nv\"\u003e$azVnetUDR\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --address-prefix 192.168.2.0/24 \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --next-hop-type VirtualAppliance \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --next-hop-ip-address 192.168.192.4\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eRun the following command to associate the route table with the Gateways subnet (called \u003cem\u003edefault\u003c/em\u003e):\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-43\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaz network vnet subnet update --name \u003cspan class=\"nv\"\u003e$azGWSubnetName\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --resource-group \u003cspan class=\"nv\"\u003e$azResourceGroup\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --route-table \u003cspan class=\"nv\"\u003e$azVnetUDR\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --vnet-name \u003cspan class=\"nv\"\u003e$azVnetName\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"enable-ip-forwarding-on-fw1\"\u003e\u003ca href=\"#enable-ip-forwarding-on-fw1\" class=\"header-mark\" aria-label=\"Header mark for 'Enable IP forwarding on FW1'\"\u003e\u003c/a\u003e\n    Enable IP forwarding on FW1\n\u003c/h3\u003e\n\n\u003cp\u003eTo enable IP forwarding in the NIC used by Gateway, complete the following steps:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-44\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaz network nic update \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --resource-group Wireguard_USEast \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --name wireguard-useast835 \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"se\"\u003e\u003c/span\u003e   --ip-forwarding true\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"router-2\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Router\n\u003c/h2\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-45\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003efirewall\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003eall-ping\u003c/span\u003e \u003cspan class=\"err\"\u003eenable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003ebroadcast-ping\u003c/span\u003e \u003cspan class=\"err\"\u003edisable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003egroup\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003enetwork-group\u003c/span\u003e \u003cspan class=\"err\"\u003ePRIVATE_NETS\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003enetwork\u003c/span\u003e \u003cspan class=\"err\"\u003e192.168.0.0/16\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003enetwork\u003c/span\u003e \u003cspan class=\"err\"\u003e172.16.0.0/12\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003enetwork\u003c/span\u003e \u003cspan class=\"err\"\u003e10.0.0.0/8\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003eipv\u003c/span\u003e\u003cspan class=\"mi\"\u003e6\u003c/span\u003e\u003cspan class=\"err\"\u003e-receive-redirects\u003c/span\u003e \u003cspan class=\"err\"\u003edisable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003eipv\u003c/span\u003e\u003cspan class=\"mi\"\u003e6\u003c/span\u003e\u003cspan class=\"err\"\u003e-src-route\u003c/span\u003e \u003cspan class=\"err\"\u003edisable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003eip-src-route\u003c/span\u003e \u003cspan class=\"err\"\u003edisable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003elog-martians\u003c/span\u003e \u003cspan class=\"err\"\u003edisable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003emodify\u003c/span\u003e \u003cspan class=\"err\"\u003ebalance\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003erule\u003c/span\u003e \u003cspan class=\"err\"\u003e10\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003eaction\u003c/span\u003e \u003cspan class=\"err\"\u003emodify\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003edescription\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;do NOT load balance lan to lan\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003edestination\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003egroup\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e           \u003cspan class=\"err\"\u003enetwork-group\u003c/span\u003e \u003cspan class=\"err\"\u003ePRIVATE_NETS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003emodify\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003etable\u003c/span\u003e \u003cspan class=\"err\"\u003emain\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003erule\u003c/span\u003e \u003cspan class=\"mi\"\u003e20\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003eaction\u003c/span\u003e \u003cspan class=\"err\"\u003emodify\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003edescription\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;do NOT load balance destination public address\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003edestination\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003egroup\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e           \u003cspan class=\"err\"\u003eaddress-group\u003c/span\u003e \u003cspan class=\"err\"\u003eADDRv4_eth0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003emodify\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003etable\u003c/span\u003e \u003cspan class=\"err\"\u003emain\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003erule\u003c/span\u003e \u003cspan class=\"mi\"\u003e30\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003eaction\u003c/span\u003e \u003cspan class=\"err\"\u003emodify\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003edescription\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;do NOT load balance destination public address\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003edestination\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003egroup\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e           \u003cspan class=\"err\"\u003eaddress-group\u003c/span\u003e \u003cspan class=\"err\"\u003eADDRv4_eth1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003emodify\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003etable\u003c/span\u003e \u003cspan class=\"err\"\u003emain\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003erule\u003c/span\u003e \u003cspan class=\"mi\"\u003e70\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003eaction\u003c/span\u003e \u003cspan class=\"err\"\u003emodify\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003emodify\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003elb-group\u003c/span\u003e \u003cspan class=\"err\"\u003eG\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003ename\u003c/span\u003e \u003cspan class=\"err\"\u003eWAN_IN\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003edefault-action\u003c/span\u003e \u003cspan class=\"err\"\u003edrop\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003edescription\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;WAN to internal\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003erule\u003c/span\u003e \u003cspan class=\"mi\"\u003e10\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003eaction\u003c/span\u003e \u003cspan class=\"err\"\u003eaccept\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003edescription\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;Allow established/related\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003estate\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003eestablished\u003c/span\u003e \u003cspan class=\"err\"\u003eenable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003erelated\u003c/span\u003e \u003cspan class=\"err\"\u003eenable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003erule\u003c/span\u003e \u003cspan class=\"mi\"\u003e20\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003eaction\u003c/span\u003e \u003cspan class=\"err\"\u003edrop\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003edescription\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;Drop invalid state\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003estate\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003einvalid\u003c/span\u003e \u003cspan class=\"err\"\u003eenable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003ename\u003c/span\u003e \u003cspan class=\"err\"\u003eWAN_LOCAL\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003edefault-action\u003c/span\u003e \u003cspan class=\"err\"\u003edrop\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003edescription\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;WAN to router\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003erule\u003c/span\u003e \u003cspan class=\"mi\"\u003e10\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003eaction\u003c/span\u003e \u003cspan class=\"err\"\u003eaccept\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003edescription\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;Allow established/related\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003estate\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003eestablished\u003c/span\u003e \u003cspan class=\"err\"\u003eenable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003erelated\u003c/span\u003e \u003cspan class=\"err\"\u003eenable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003erule\u003c/span\u003e \u003cspan class=\"mi\"\u003e20\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003eaction\u003c/span\u003e \u003cspan class=\"err\"\u003edrop\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003edescription\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;Drop invalid state\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003estate\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003einvalid\u003c/span\u003e \u003cspan class=\"err\"\u003eenable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003ereceive-redirects\u003c/span\u003e \u003cspan class=\"err\"\u003edisable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003esend-redirects\u003c/span\u003e \u003cspan class=\"err\"\u003eenable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003esource-validation\u003c/span\u003e \u003cspan class=\"err\"\u003edisable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003esyn-cookies\u003c/span\u003e \u003cspan class=\"err\"\u003eenable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003einterfaces\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003eethernet\u003c/span\u003e \u003cspan class=\"err\"\u003eeth0\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eaddress\u003c/span\u003e \u003cspan class=\"err\"\u003e88.81.97.90/29\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eaddress\u003c/span\u003e \u003cspan class=\"err\"\u003e88.81.97.91/29\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eaddress\u003c/span\u003e \u003cspan class=\"err\"\u003e88.81.97.92/29\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eaddress\u003c/span\u003e \u003cspan class=\"err\"\u003e88.81.97.93/29\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eaddress\u003c/span\u003e \u003cspan class=\"err\"\u003e88.81.97.94/29\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003edescription\u003c/span\u003e \u003cspan class=\"err\"\u003eWAN\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eduplex\u003c/span\u003e \u003cspan class=\"err\"\u003eauto\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003efirewall\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003ein\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003ename\u003c/span\u003e \u003cspan class=\"err\"\u003eWAN_IN\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003elocal\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003ename\u003c/span\u003e \u003cspan class=\"err\"\u003eWAN_LOCAL\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003espeed\u003c/span\u003e \u003cspan class=\"err\"\u003eauto\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003eethernet\u003c/span\u003e \u003cspan class=\"err\"\u003eeth\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eaddress\u003c/span\u003e \u003cspan class=\"err\"\u003edhcp\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003edescription\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;WAN 2\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eduplex\u003c/span\u003e \u003cspan class=\"err\"\u003eauto\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003efirewall\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003ein\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003ename\u003c/span\u003e \u003cspan class=\"err\"\u003eWAN_IN\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003elocal\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003ename\u003c/span\u003e \u003cspan class=\"err\"\u003eWAN_LOCAL\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003espeed\u003c/span\u003e \u003cspan class=\"err\"\u003eauto\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003eethernet\u003c/span\u003e \u003cspan class=\"err\"\u003eeth\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eduplex\u003c/span\u003e \u003cspan class=\"err\"\u003eauto\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003espeed\u003c/span\u003e \u003cspan class=\"err\"\u003eauto\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003eethernet\u003c/span\u003e \u003cspan class=\"err\"\u003eeth\u003c/span\u003e\u003cspan class=\"mi\"\u003e3\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eduplex\u003c/span\u003e \u003cspan class=\"err\"\u003eauto\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003espeed\u003c/span\u003e \u003cspan class=\"err\"\u003eauto\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003eethernet\u003c/span\u003e \u003cspan class=\"err\"\u003eeth\u003c/span\u003e\u003cspan class=\"mi\"\u003e4\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eduplex\u003c/span\u003e \u003cspan class=\"err\"\u003eauto\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003espeed\u003c/span\u003e \u003cspan class=\"err\"\u003eauto\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003eloopback\u003c/span\u003e \u003cspan class=\"err\"\u003elo\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003eswitch\u003c/span\u003e \u003cspan class=\"err\"\u003eswitch\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eaddress\u003c/span\u003e \u003cspan class=\"err\"\u003e172.16.1.1/24\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003edescription\u003c/span\u003e \u003cspan class=\"err\"\u003eLocal\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003efirewall\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003ein\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003emtu\u003c/span\u003e \u003cspan class=\"mi\"\u003e1500\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eswitch-port\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003einterface\u003c/span\u003e \u003cspan class=\"err\"\u003eeth2\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003einterface\u003c/span\u003e \u003cspan class=\"err\"\u003eeth\u003c/span\u003e\u003cspan class=\"mi\"\u003e3\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003einterface\u003c/span\u003e \u003cspan class=\"err\"\u003eeth\u003c/span\u003e\u003cspan class=\"mi\"\u003e4\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003evlan-aware\u003c/span\u003e \u003cspan class=\"err\"\u003edisable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003ewireguard\u003c/span\u003e \u003cspan class=\"err\"\u003ewg\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eaddress\u003c/span\u003e \u003cspan class=\"err\"\u003e192.168.2.2/24\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003elisten-port\u003c/span\u003e \u003cspan class=\"err\"\u003e51820\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003epeer\u003c/span\u003e \u003cspan class=\"err\"\u003e3cv0P5Q8o9rR4nyq3mx8iTid2CMjab4nrqbo5lgm4lc=\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003eallowed-ips\u003c/span\u003e \u003cspan class=\"err\"\u003e0.0.0.0/0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003edescription\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;Azure USEast\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003eendpoint\u003c/span\u003e \u003cspan class=\"mf\"\u003e40.71\u003c/span\u003e\u003cspan class=\"err\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e229.107\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"mi\"\u003e51820\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eprivate-key\u003c/span\u003e \u003cspan class=\"err\"\u003e/config/auth/wg.private\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eroute-allowed-ips\u003c/span\u003e \u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003eload-balance\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003egroup\u003c/span\u003e \u003cspan class=\"err\"\u003eG\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003einterface\u003c/span\u003e \u003cspan class=\"err\"\u003eeth0\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003einterface\u003c/span\u003e \u003cspan class=\"err\"\u003eeth\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003efailover-only\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003elb-local\u003c/span\u003e \u003cspan class=\"err\"\u003eenable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003elb-local-metric-change\u003c/span\u003e \u003cspan class=\"err\"\u003edisable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003eprotocols\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003estatic\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eroute\u003c/span\u003e \u003cspan class=\"err\"\u003e0.0.0.0/0\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003enext-hop\u003c/span\u003e \u003cspan class=\"err\"\u003e88.81.97.89\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003eservice\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003edns\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eforwarding\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003ecache-size\u003c/span\u003e \u003cspan class=\"err\"\u003e150\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003elisten-on\u003c/span\u003e \u003cspan class=\"err\"\u003eswitch0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003egui\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003ehttp-port\u003c/span\u003e \u003cspan class=\"err\"\u003e80\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003ehttps-port\u003c/span\u003e \u003cspan class=\"err\"\u003e443\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eolder-ciphers\u003c/span\u003e \u003cspan class=\"err\"\u003eenable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003enat\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003erule\u003c/span\u003e \u003cspan class=\"err\"\u003e5000\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003edescription\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;masquerade for WAN\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003eoutbound-interface\u003c/span\u003e \u003cspan class=\"err\"\u003eeth\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003etype\u003c/span\u003e \u003cspan class=\"err\"\u003emasquerade\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003erule\u003c/span\u003e \u003cspan class=\"mi\"\u003e5002\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003edescription\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;masquerade for WAN 2\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003eoutbound-interface\u003c/span\u003e \u003cspan class=\"err\"\u003eeth\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003etype\u003c/span\u003e \u003cspan class=\"err\"\u003emasquerade\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003essh\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eport\u003c/span\u003e \u003cspan class=\"err\"\u003e22\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eprotocol-version\u003c/span\u003e \u003cspan class=\"err\"\u003ev2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003eunms\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003edisable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003esystem\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003econntrack\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eexpect-table-size\u003c/span\u003e \u003cspan class=\"err\"\u003e4096\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003ehash-size\u003c/span\u003e \u003cspan class=\"err\"\u003e4096\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003etable-size\u003c/span\u003e \u003cspan class=\"err\"\u003e32768\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003etcp\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003ehalf-open-connections\u003c/span\u003e \u003cspan class=\"err\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003eloose\u003c/span\u003e \u003cspan class=\"err\"\u003eenable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003emax-retrans\u003c/span\u003e \u003cspan class=\"err\"\u003e3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003ehost-name\u003c/span\u003e \u003cspan class=\"err\"\u003eubnt\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003elogin\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003euser\u003c/span\u003e \u003cspan class=\"err\"\u003eubnt\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003eauthentication\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003eencrypted-password\u003c/span\u003e \u003cspan class=\"err\"\u003e$...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003elevel\u003c/span\u003e \u003cspan class=\"err\"\u003eadmin\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003ename-server\u003c/span\u003e \u003cspan class=\"mf\"\u003e8.8\u003c/span\u003e\u003cspan class=\"err\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e8.8\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003ename-server\u003c/span\u003e \u003cspan class=\"mf\"\u003e8.8\u003c/span\u003e\u003cspan class=\"err\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e4.4\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003entp\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eserver\u003c/span\u003e \u003cspan class=\"err\"\u003e0.ubnt.pool.ntp.org\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eserver\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"err\"\u003e.ubnt.pool.ntp.org\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eserver\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"err\"\u003e.ubnt.pool.ntp.org\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eserver\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"err\"\u003e.ubnt.pool.ntp.org\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003esyslog\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eglobal\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003efacility\u003c/span\u003e \u003cspan class=\"err\"\u003eall\u003c/span\u003e \u003cspan class=\"err\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003elevel\u003c/span\u003e \u003cspan class=\"err\"\u003enotice\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"err\"\u003efacility\u003c/span\u003e \u003cspan class=\"err\"\u003eprotocols\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"err\"\u003elevel\u003c/span\u003e \u003cspan class=\"err\"\u003edebug\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003etime-zone\u003c/span\u003e \u003cspan class=\"err\"\u003eUTC\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"err\"\u003etraffic-analysis\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003edpi\u003c/span\u003e \u003cspan class=\"err\"\u003eenable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"err\"\u003eexport\u003c/span\u003e \u003cspan class=\"err\"\u003eenable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e/*\u003c/span\u003e \u003cspan class=\"err\"\u003eWarning:\u003c/span\u003e \u003cspan class=\"err\"\u003eDo\u003c/span\u003e \u003cspan class=\"err\"\u003enot\u003c/span\u003e \u003cspan class=\"err\"\u003eremove\u003c/span\u003e \u003cspan class=\"err\"\u003ethe\u003c/span\u003e \u003cspan class=\"err\"\u003efollowing\u003c/span\u003e \u003cspan class=\"err\"\u003eline.\u003c/span\u003e \u003cspan class=\"err\"\u003e*/\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e/*\u003c/span\u003e \u003cspan class=\"err\"\u003e===\u003c/span\u003e \u003cspan class=\"err\"\u003evyatta-config-version:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;config-management@1:conntrack@1:cron@1:dhcp-relay@1:dhcp-server@4:firewall@5:ipsec@5:nat@3:qos@1:quagga@2:system@4:ubnt-pptp@1:ubnt-unms@1:ubnt-util@1:vrrp@1:webgui@1:webproxy@1:zone-policy@1\u0026#34;\u003c/span\u003e \u003cspan class=\"err\"\u003e===\u003c/span\u003e \u003cspan class=\"err\"\u003e*/\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e/*\u003c/span\u003e \u003cspan class=\"err\"\u003eRelease\u003c/span\u003e \u003cspan class=\"err\"\u003eversion:\u003c/span\u003e \u003cspan class=\"err\"\u003ev\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.9\u003c/span\u003e\u003cspan class=\"err\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e7\u003c/span\u003e\u003cspan class=\"err\"\u003e+hotfix.\u003c/span\u003e\u003cspan class=\"mf\"\u003e2.5010181\u003c/span\u003e\u003cspan class=\"err\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e170818.0412\u003c/span\u003e \u003cspan class=\"err\"\u003e*/\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n",
        "language": "en"
    },
    {
        "title" : "Configuring the Web Application Firewall with PowerShell.",
        "date_published" : "2019-10-03T00:00:00Z",
        "date_modified" : "2019-10-03T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/configuring-the-web-application-firewall-with-powershell./",
        "url" : "https://damianflynn.github.io/posts/configuring-the-web-application-firewall-with-powershell./",
        "summary": "Microsoft Azure Application Gateway is a Layer 7 application delivery controller (ADC) offered as a service in Azure. It provides load balancing, SSL termination, end-to-end SSL, URL path-based routing, and basic web application firewall (WAF) functionality.\nWorking with the WAF, I usually build a basic configuration in the Portal before exporting the ARM JSON, which, then becomes my primary method to working on this service.\nWhy JSON you may ask…\n",
        "content_html" : "\u003cp\u003eMicrosoft Azure Application Gateway is a Layer 7 application delivery controller (ADC) offered as a service in Azure. It provides load balancing, SSL termination, end-to-end SSL, URL path-based routing, and basic web application firewall (WAF) functionality.\u003c/p\u003e\n\u003cp\u003eWorking with the WAF, I usually build a basic configuration in the Portal before exporting the ARM JSON, which, then becomes my primary method to working on this service.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eWhy JSON you may ask…\u003c/strong\u003e\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eOne of my biggest gripes with the Azure Firewall solutions currently is based on thier CRUD _(Create, Read, Update and Delete)_ interface. It always results in a workflow from hell, training along the lines of ‘_Edit, Save,_ _**WAIT,**_, _Edit, Save,_ _**WAIT**_’ in a painful loop. What should be a fast and straightforward configuration update, typically is a process that must be executed over many hours, preferably on a second screen.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003ePowershell\u003c/strong\u003e\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eWhile I spend a large amount of my working time sitting in VS code, with a terminal logged into Azure with both Powershell and Azure CLI, I do not every recall trying to work with the Application Gateway from this interface ever!\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eI was asked to check the HTTP Timeout on one of the Firewalls I have access to, and send the details to a colleague; my first port of call was JSON, and then realized that this is a bit ugly for the request in hand.\u003c/p\u003e\n\u003cp\u003eA quick PowerShell command should sort this out, which of course has even more Idiosyncrasy.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"working-with-application-gateways-in-powershell\"\u003e\u003ca href=\"#working-with-application-gateways-in-powershell\" class=\"header-mark\" aria-label=\"Header mark for 'Working With Application Gateways in PowerShell'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"working-with-application-gateways-in-powershell\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Working With Application Gateways in PowerShell\n\u003c/h1\u003e\n\u003cp\u003eWait for it (Remember my CRUD comment). Well, The PowerShell implementation is restricted by that same API limitations. The first step for updating any existing Gateway is to load the whole gateway configuration from Azure into a PowerShell object.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$appGw\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eGet-AzApplicationGateway\u003c/span\u003e \u003cspan class=\"n\"\u003e-Name\u003c/span\u003e \u003cspan class=\"nb\"\u003ep-ap1pub\u003c/span\u003e\u003cspan class=\"n\"\u003e-waf01\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eFrom here, all the changes we make are to the PowerShell object \u003ccode\u003e$appGw\u003c/code\u003e until we are ready to commit the gateway back to Azure with the following command:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eSet-AzApplicationGateway\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGw\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"making-changes\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Making changes\n\u003c/h2\u003e\n\u003cp\u003eUnderstanding that all configurations are going to be applied to our in-memory object \u003ccode\u003e$appGw\u003c/code\u003e; we can use any of the available PowerShell commandlets to alter this object, and once ready to validate we must push these changes back to Azure with the \u003ccode\u003eSet-AzApplicationGateway\u003c/code\u003e\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eNow you will understand why I ignore this rubbish and work with the ARM JSON!\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cp\u003eLet’s take a swift tour of working with this object to establish an end-to-end SSL listener, which would be atypical of any implemented configuration.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"backend\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Backend\n\u003c/h2\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"backend-pool\"\u003e\u003ca href=\"#backend-pool\" class=\"header-mark\" aria-label=\"Header mark for 'Backend Pool'\"\u003e\u003c/a\u003e\n    Backend Pool\n\u003c/h3\u003e\n\n\u003cp\u003eThe backend pool for our web servers can be created using FQDNs or IPs; I usually implement this initially using IP addresses.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eAdd-AzApplicationGatewayBackendAddressPool\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGW\u003c/span\u003e \u003cspan class=\"n\"\u003e-Name\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;AppPool\u0026#34;\u003c/span\u003e \u003cspan class=\"n\"\u003e-BackendIPAddresses\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;192.168.####101\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;192.168.1.102\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$appGwBackPool\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eGet-AzApplicationGatewayBackendAddressPool\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGW\u003c/span\u003e \u003cspan class=\"n\"\u003e-Name\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;AppPool\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"backend-ssl-encryption\"\u003e\u003ca href=\"#backend-ssl-encryption\" class=\"header-mark\" aria-label=\"Header mark for 'Backend SSL Encryption'\"\u003e\u003c/a\u003e\n    Backend SSL Encryption\n\u003c/h3\u003e\n\n\u003cp\u003eFrequently, we establish the connection as a genuine end-to-end encrypted connection; which implies that the Web Application Gateway should have an authentication certificate, so it only forward’s traffic to a backend server if it has the expected SSL certificate.\u003c/p\u003e\n\u003cp\u003eTo enable this, we must upload the public certificate used by the backend servers.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-4\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eAdd-AzApplicationGatewayAuthenticationCertificate\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGW\u003c/span\u003e \u003cspan class=\"n\"\u003e-Name\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;AppPoolPublicCert\u0026#34;\u003c/span\u003e \u003cspan class=\"n\"\u003e-CertificateFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;.\\myAppPublicCertifcate.cer\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$appGwBackPoolCert\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eGet-AzureRmApplicationGatewayAuthenticationCertificate\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGW\u003c/span\u003e \u003cspan class=\"n\"\u003e-Name\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;AppPoolPublicCert\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"configure-the-backend-service\"\u003e\u003ca href=\"#configure-the-backend-service\" class=\"header-mark\" aria-label=\"Header mark for 'Configure the Backend Service'\"\u003e\u003c/a\u003e\n    Configure the Backend Service\n\u003c/h3\u003e\n\n\u003cp\u003eNow, we can configure the HTTPS Protocol and authentication certificate the WAF will use to validate the backend servers.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-5\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eAdd-AzApplicationGatewayBackendHttpSettings\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGW\u003c/span\u003e \u003cspan class=\"n\"\u003e-Name\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;AppPoolHTTPS\u0026#34;\u003c/span\u003e \u003cspan class=\"n\"\u003e-Port\u003c/span\u003e \u003cspan class=\"mf\"\u003e443\u003c/span\u003e \u003cspan class=\"n\"\u003e-Protocol\u003c/span\u003e \u003cspan class=\"n\"\u003eHttps\u003c/span\u003e \u003cspan class=\"n\"\u003e-CookieBasedAffinity\u003c/span\u003e \u003cspan class=\"n\"\u003eEnabled\u003c/span\u003e \u003cspan class=\"n\"\u003e-AuthenticationCertificates\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGwBackPoolCert$appGwBackPoolHTTPS\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eGet-AzureRmApplicationGatewayBackendHttpSettings\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$AppGW\u003c/span\u003e \u003cspan class=\"n\"\u003e-Name\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;AppPoolHTTPS\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"frontend\"\u003e\u003ca href=\"#frontend\" class=\"header-mark\" aria-label=\"Header mark for 'Frontend'\"\u003e\u003c/a\u003e\n    Frontend\n\u003c/h3\u003e\n\n\u003cp\u003eNow we can switch focus on build the frontend configuration.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"a-public-ssl-certificate\"\u003e\u003ca href=\"#a-public-ssl-certificate\" class=\"header-mark\" aria-label=\"Header mark for 'A public SSL certificate.'\"\u003e\u003c/a\u003e\n    A public SSL certificate.\n\u003c/h3\u003e\n\n\u003cp\u003eThe certificate should be in PFX format with a password. We add this to the gateway object as follows:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-6\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eAdd-AzApplicationGatewaySslCertificate\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGw\u003c/span\u003e \u003cspan class=\"n\"\u003e-Name\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;FrontCert\u0026#34;\u003c/span\u003e \u003cspan class=\"n\"\u003e-CertificateFile\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;.\\myExternalFacingCertWithPrivateKey.pfx\u0026#34;\u003c/span\u003e \u003cspan class=\"n\"\u003e-Password\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;myP@ssw0rd!\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$appGwFrontCert\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eGet-AzApplicationGatewaySslCertificate\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGW\u003c/span\u003e \u003cspan class=\"n\"\u003e-Name\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;FrontCert\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"https-port-tcp-443\"\u003e\u003ca href=\"#https-port-tcp-443\" class=\"header-mark\" aria-label=\"Header mark for 'HTTPS Port (TCP 443)'\"\u003e\u003c/a\u003e\n    HTTPS Port (TCP 443)\n\u003c/h3\u003e\n\n\u003cp\u003eEnsure that we have TCP 443 allowed on our gateway.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-7\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eAdd-AzApplicationGatewayFrontendPort\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGw\u003c/span\u003e \u003cspan class=\"n\"\u003e-Name\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;FrontHTTPS\u0026#34;\u003c/span\u003e \u003cspan class=\"n\"\u003e-Port\u003c/span\u003e \u003cspan class=\"err\"\u003e“\u003c/span\u003e\u003cspan class=\"mf\"\u003e443\u003c/span\u003e\u003cspan class=\"err\"\u003e”\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$appGwFrontPort\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eGet-AzApplicationGatewayFrontendPort\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGw\u003c/span\u003e \u003cspan class=\"n\"\u003e-Name\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;FrontHTTPS\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"ip-configuration-object\"\u003e\u003ca href=\"#ip-configuration-object\" class=\"header-mark\" aria-label=\"Header mark for 'IP Configuration Object'\"\u003e\u003c/a\u003e\n    IP Configuration Object\n\u003c/h3\u003e\n\n\u003cp\u003eThe last part of this jigsaw is the Frontend IP Configuration.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-8\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$appGwFrontIPConfig\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eGet-AzApplicationGatewayFrontendIPConfig\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$AppGw\u003c/span\u003e \u003cspan class=\"n\"\u003e-Name\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;FrontIP\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"my-applications-listener\"\u003e\u003ca href=\"#my-applications-listener\" class=\"header-mark\" aria-label=\"Header mark for 'My Applications Listener'\"\u003e\u003c/a\u003e\n    My Applications Listener\n\u003c/h3\u003e\n\n\u003cp\u003eNow, we can combine the parts above to create a listener object.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-9\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eAdd-AzApplicationGatewayHttpListener\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGW\u003c/span\u003e \u003cspan class=\"n\"\u003e-Name\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;appListener\u0026#34;\u003c/span\u003e \u003cspan class=\"n\"\u003e-Protocol\u003c/span\u003e \u003cspan class=\"n\"\u003eHttps\u003c/span\u003e \u003cspan class=\"n\"\u003e-FrontendIPConfiguration\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGwFrontIPConfig\u003c/span\u003e \u003cspan class=\"n\"\u003e-FrontendPort\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGwFrontPort\u003c/span\u003e \u003cspan class=\"n\"\u003e-HostName\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;fqdn.myapp.site\u0026#34;\u003c/span\u003e \u003cspan class=\"n\"\u003e-RequireServerNameIndication\u003c/span\u003e \u003cspan class=\"n\"\u003etrue\u003c/span\u003e \u003cspan class=\"n\"\u003e-SslCertificate\u003c/span\u003e \u003cspan class=\"nv\"\u003e$AppGwFrontCert$appGwListener\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eGet-AzureRmApplicationGatewayHttpListener\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGW\u003c/span\u003e \u003cspan class=\"n\"\u003e-Name\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;appListener\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"routing-flow\"\u003e\u003ca href=\"#routing-flow\" class=\"header-mark\" aria-label=\"Header mark for 'Routing Flow'\"\u003e\u003c/a\u003e\n    Routing Flow\n\u003c/h3\u003e\n\n\u003cp\u003eNow we glue these two concepts together and build the route from the listener to the server.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-10\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eAdd-AzApplicationGatewayRequestRoutingRule\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGW\u003c/span\u003e \u003cspan class=\"n\"\u003e-Name\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;AppRule\u0026#34;\u003c/span\u003e \u003cspan class=\"n\"\u003e-RuleType\u003c/span\u003e \u003cspan class=\"n\"\u003ebasic\u003c/span\u003e \u003cspan class=\"n\"\u003e-BackendHttpSettings\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGwBackPoolHTTPS\u003c/span\u003e \u003cspan class=\"n\"\u003e-HttpListener\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGwListener\u003c/span\u003e \u003cspan class=\"n\"\u003e-BackendAddressPool\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGwBackPool\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"publish\"\u003e\u003ca href=\"#publish\" class=\"header-mark\" aria-label=\"Header mark for 'Publish'\"\u003e\u003c/a\u003e\n    Publish\n\u003c/h3\u003e\n\n\u003cp\u003eThat’s - Now we publish and test to see if we got it working, or messed up.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-11\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eSet-AzApplicationGateway\u003c/span\u003e \u003cspan class=\"n\"\u003e-ApplicationGateway\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGw\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"reporting-configuration\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Reporting Configuration\n\u003c/h2\u003e\n\u003cp\u003eOk, Distraction aside, we started this post, as we needed to get a quick report on all the listeners configured, including the associated timeout each has currently defined.\u003c/p\u003e\n\u003cp\u003eWith the knowledge of how to work with the App Gateway in PowerShell, this request is indeed trivial to complete\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-12\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$appGw\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003eBackendHttpSettingsCollection\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e \u003cspan class=\"nb\"\u003eselect \u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eport\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eprotocol\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erequesttimeout\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eName\u003c/span\u003e                             \u003cspan class=\"n\"\u003ePort\u003c/span\u003e \u003cspan class=\"n\"\u003eProtocol\u003c/span\u003e \u003cspan class=\"n\"\u003eRequestTimeout\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e----\u003c/span\u003e                             \u003cspan class=\"p\"\u003e----\u003c/span\u003e \u003cspan class=\"p\"\u003e--------\u003c/span\u003e \u003cspan class=\"p\"\u003e-------------\u003c/span\u003e\u003cspan class=\"n\"\u003e-http_t-www\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003emysite\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003ecom\u003c/span\u003e              \u003cspan class=\"mf\"\u003e80\u003c/span\u003e \u003cspan class=\"n\"\u003eHttp\u003c/span\u003e                 \u003cspan class=\"n\"\u003e20https_t-www\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003emysite\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"py\"\u003ecom\u003c/span\u003e            \u003cspan class=\"mf\"\u003e443\u003c/span\u003e \u003cspan class=\"n\"\u003eHttps\u003c/span\u003e                \u003cspan class=\"mf\"\u003e20\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n",
        "language": "en"
    },
    {
        "title" : "Installing Docker and Compose on Raspbian Buster",
        "date_published" : "2019-10-01T00:00:00Z",
        "date_modified" : "2019-10-01T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/installing-docker-and-compose-on-raspbian-buster/",
        "url" : "https://damianflynn.github.io/posts/installing-docker-and-compose-on-raspbian-buster/",
        "summary": " Quickly update a new Raspberry Pi, which has an install of Raspbian Buster with Docker and Docker-compose.\nDocker This is simple, as the Docker team have done all the work\nshell\n",
        "content_html" : "\u003chr\u003e\n\u003cp\u003eQuickly update a new Raspberry Pi, which has an install of Raspbian Buster with Docker and Docker-compose.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"docker\"\u003e\u003ca href=\"#docker\" class=\"header-mark\" aria-label=\"Header mark for 'Docker'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"docker\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Docker\n\u003c/h1\u003e\n\u003cp\u003eThis is simple, as the Docker team have done all the work\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -fsSL get.docker.com -o get-docker.sh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esh get-docker.sh\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAnd, we can add our user to the Docker group so we do not need the \u003ccode\u003esudo\u003c/code\u003e every time. I am using the environment variable \u003ccode\u003e$USER\u003c/code\u003e; which indicates who is logged in currently. In my case this is the user \u003cem\u003epi\u003c/em\u003e.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo usermod -aG docker \u003cspan class=\"nv\"\u003e$USER\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eRight, that was painful. now reboot the Pi and we are solid.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"docker-compose\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Docker-Compose\n\u003c/h2\u003e\n\u003cp\u003eThis is actually a Python script. Raspbian Buster is shipped with Python 3.6; so we just need to add \u003ccode\u003ePIP3\u003c/code\u003e to install the python packages from \u003cem\u003epypy\u003c/em\u003e\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get install -y python3 python3-pip\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo pip3 install docker-compose\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eWow, that was a struggle, lets check we are good\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-4\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker-compose --version\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n",
        "language": "en"
    },
    {
        "title" : "Running FastLED on the Dual-Core ESP32",
        "date_published" : "2019-09-11T00:00:00Z",
        "date_modified" : "2019-09-11T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/running-fastled-on-the-dual-core-esp32/",
        "url" : "https://damianflynn.github.io/posts/running-fastled-on-the-dual-core-esp32/",
        "summary": " There are many projects posted over the web which implement the excellent FastLED library on the ESP12 processor; however locating a project which implements this on the more powerful sibling is a lot more difficult.\nSo, with a few failed attempts and a lot of patching samples together; I have a stable running implementation which you can clone or fork to get up and running quickly with your own projects.\n",
        "content_html" : "\u003chr\u003e\n\u003cp\u003eThere are many projects posted over the web which implement the excellent FastLED library on the ESP12 processor; however locating a project which implements this on the more powerful sibling is a lot more difficult.\u003c/p\u003e\n\u003cp\u003eSo, with a few failed attempts and a lot of patching samples together; I have a stable running implementation which you can clone or fork to get up and running quickly with your own projects.\u003c/p\u003e\n\u003cp\u003eThe sample includes 2 different sequences, a simple moving dot; and a more colourful Cylon effect.\u003c/p\u003e\n\u003cp\u003eThe code is complied within Visual Studio Code; with the Platform.IO environment; and includes a working settings file while will automatically install the required libraries, ready to compile and flash to your device.\u003c/p\u003e\n\u003cp\u003eCheck out the repo on GitHub @ \u003ca href=\"https://github.com/DamianFlynn/ESP32FastLED\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehttps://github.com/DamianFlynn/ESP32FastLED\u003c/a\u003e; and if you have issues please use the tracker.\u003c/p\u003e\n\u003cp\u003eEnjoy\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Configure Wireguard on UniFi USG",
        "date_published" : "2019-08-17T00:00:00Z",
        "date_modified" : "2019-08-17T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/configure-wireguard-on-unifi-usg/",
        "url" : "https://damianflynn.github.io/posts/configure-wireguard-on-unifi-usg/",
        "summary": "Install the Wireguard Package\nSSH directly to your USG, and run the following commands:\nshell\n",
        "content_html" : "\u003cp\u003e\u003cstrong\u003eInstall the Wireguard Package\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSSH directly to your USG, and run the following commands:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -L https://github.com/Lochnair/vyatta-wireguard/releases/download/0.0.20190123/wireguard-ugw3-0.0.20190702-1.deb -o /tmp/wireguard.deb\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edpkg -i /tmp/wireguard.deb\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"create-the-tunnel-secrets\"\u003e\u003ca href=\"#create-the-tunnel-secrets\" class=\"header-mark\" aria-label=\"Header mark for 'Create the Tunnel Secrets'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"create-the-tunnel-secrets\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Create the Tunnel Secrets\n\u003c/h1\u003e\n\u003cp\u003eTo keep stuff private, we will encrypt the traffic using a long password, known as a ‘Key’. To make sure this is unique, we will use a tool provided by Wireguard to make a random key for us.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e /config/auth\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eumask\u003c/span\u003e \u003cspan class=\"m\"\u003e077\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir wireguard\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e wireguard\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewg genkey \u0026gt; wg_private.key\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewg pubkey \u0026lt; wg_private.key \u0026gt; wg_public.key\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"configure-the-tunnels\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Configure the Tunnels\n\u003c/h2\u003e\n\u003cp\u003eWhile still connected to the USG, we will now create the Interface which will be our end of the tunnel. If we consider this as a Bridge, then as we configure this interface, we will provide the address for our side and also the address of the far side.\u003c/p\u003e\n\u003cp\u003eThe far side is protected from just anyone connecting to it by using another long password (key) which we need to know before we can complete this process.\u003c/p\u003e\n\u003cp\u003eIn this example 192.168.33.1 is assumed to be your network, you should change these to match your network space.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Set the USG into configuration Mode\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econfigure\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# We start, by creating a new Network space for our side of the VPN\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e interfaces wireguard wg0 address 10.192.10.2/32\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Configure the Port Wireguard will be listening with\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e interfaces wireguard wg0 listen-port \u003cspan class=\"m\"\u003e51820\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Allow this interface to forward the traffic over our tunnel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e interfaces wireguard wg0 route-allowed-ips \u003cspan class=\"nb\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Now, we need to tell the interface the address of the far side of the bridge\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# And also the password to allow us connect\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e interfaces wireguard wg0 peer \u0026lt;Insert-Public-Key-Of-Peer-Here\u0026gt; endpoint 14.28.207.179:51820\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Now, we will tell the far side of the bridge about our network\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# This is to ensure that the far side lets our network get out of the tunnel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# The sample only allows the IPs 192.168.33.101 to 192.168.33.106 to cross over\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# you can choose to let everything by using the address 0.0.0.0/0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e interfaces wireguard wg0 peer \u0026lt;Insert-Public-Key-Of-Peer-Here\u0026gt; allowed-ips 10.192.10.0/32\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Lets tell the interface where to find our long password we created earlier\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e interfaces wireguard wg0 private-key /config/auth/wireguard/wg_private.key\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Make the changes active, save them and exit configuration mode\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecommit\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esave\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eexit\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"firewalls-block-traffic\"\u003e\u003ca href=\"#firewalls-block-traffic\" class=\"header-mark\" aria-label=\"Header mark for 'Firewalls block traffic'\"\u003e\u003c/a\u003e\n    Firewalls block traffic\n\u003c/h3\u003e\n\n\u003cp\u003eAnd our tunnel is no exception, so we need to allow our new Tunnel Interface to be permitted to let the traffic flow. In this case we need to let the far side of the bridge connect back to us; after all there is no point sending traffic over if nothing can come back !\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-4\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Set the USG into configuration Modeconfigure\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Configure the firewall\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e firewall name WAN_LOCAL rule \u003cspan class=\"m\"\u003e20\u003c/span\u003e action accept\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e firewall name WAN_LOCAL rule \u003cspan class=\"m\"\u003e20\u003c/span\u003e protocol udp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e firewall name WAN_LOCAL rule \u003cspan class=\"m\"\u003e20\u003c/span\u003e description \u003cspan class=\"s1\"\u003e\u0026#39;WireGuard\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e firewall name WAN_LOCAL rule \u003cspan class=\"m\"\u003e20\u003c/span\u003e destination port \u003cspan class=\"m\"\u003e51820\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Make the changes active, save them and exit configuration mode\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecommit\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esave\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eexit\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAfterwards dump the \u003ccode\u003econfig.gateway.json\u003c/code\u003e and put it in the controller so it do not get overwritten\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"reconfigure-after-an-update\"\u003e\u003ca href=\"#reconfigure-after-an-update\" class=\"header-mark\" aria-label=\"Header mark for 'Reconfigure after an Update'\"\u003e\u003c/a\u003e\n    Reconfigure after an Update\n\u003c/h3\u003e\n\n\u003cp\u003eCopy your backed up \u003ccode\u003econfig.gateway.json\u003c/code\u003e to \u003ccode\u003e/var/lib/unifi/data/sites/default\u003c/code\u003e on the system running the Controller (which might also be a Cloud Key).\u003c/p\u003e\n\u003cp\u003eThen through the Controller Web UI navigate to \u003cstrong\u003eDevices\u003c/strong\u003e, click on the \u003cstrong\u003eUSG\u003c/strong\u003e row and then in the \u003cstrong\u003eProperties\u003c/strong\u003e window navigate to \u003cstrong\u003eConfig \u0026gt; Manage Device\u003c/strong\u003e and click \u003cstrong\u003eProvision\u003c/strong\u003e.\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Updating Pester on Windows 10",
        "date_published" : "2019-01-29T00:00:00Z",
        "date_modified" : "2019-01-29T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/updating-pester-on-windows-10/",
        "url" : "https://damianflynn.github.io/posts/updating-pester-on-windows-10/",
        "summary": " I spend the majority of my time working on my Windows machines, and for many scenarios, I find it difficult to complain. However, when Windows decides to dig the boot in and not co-operative; usually is when I grab my Mac Book and get the work done.\nHowever, running aware from the problem rarely is a good fix for the issue; My latest battle has been Pester. The testing framework builds on Powershell, and by the grace of God, now shipped as part of the Windows 10 operating system.\n",
        "content_html" : "\u003chr\u003e\n\u003cp\u003eI spend the majority of my time working on my Windows machines, and for many scenarios, I find it difficult to complain. However, when Windows decides to dig the boot in and not co-operative; usually is when I grab my Mac Book and get the work done.\u003c/p\u003e\n\u003cp\u003eHowever, running aware from the problem rarely is a good fix for the issue; My latest battle has been Pester. The testing framework builds on Powershell, and by the grace of God, now shipped as part of the Windows 10 operating system.\u003c/p\u003e\n\u003cp\u003eThe issue is that the included version is 3.4 and at the time of writing the current release is 4.6. Typically, this is a non-issue a directly issuing an \u003ccode\u003eUpdate-Module\u003c/code\u003e command addresses the issue and allow the product to continue.\u003c/p\u003e\n\u003cp\u003eIn the odd case we might need to revert to a push and include the \u003ccode\u003e-Force\u003c/code\u003e switch; but for various reasons, this sometimes also fails; which is the case in this Pester Module scenario\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"the-hard-way\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  The Hard Way\n\u003c/h2\u003e\n\u003cp\u003eA little research identifies that over time, a few things have evolved with this module. In our case, the certificate used for signing the modules has changed, and for obvious reasons of security, the normal processes are failing.\u003c/p\u003e\n\u003cp\u003eTo accomplish the objective in this case, I have reverted to removing the pre-installed version of pester, and then once a memory; I can proceed to deploy the newest release of this product.\u003c/p\u003e\n\u003cp\u003eUsing an administrative PowerShell session, I proceed to issue the following commands; which define where the module in question is residing on my system and then assume ownership of the associated files, which I then delete. After all, Powershell modules are discovered, based on the search folder they have been installed within.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003e$module\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;c:\\Program Files\\WindowsPowerShell\\Modules\\Pester\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etakeown\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eF\u003c/span\u003e \u003cspan class=\"nv\"\u003e$module\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eA\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eRicacls\u003c/span\u003e \u003cspan class=\"nv\"\u003e$module\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ereset\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eicacls\u003c/span\u003e \u003cspan class=\"nv\"\u003e$module\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003egrant\u003c/span\u003e \u003cspan class=\"n\"\u003eAdministrators\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;F\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003einheritance\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003ed\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eT\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eRemove-Item\u003c/span\u003e \u003cspan class=\"n\"\u003e-Path\u003c/span\u003e \u003cspan class=\"nv\"\u003e$Module\u003c/span\u003e \u003cspan class=\"n\"\u003e-Recurse\u003c/span\u003e \u003cspan class=\"n\"\u003e-Force\u003c/span\u003e \u003cspan class=\"n\"\u003e-Confirm:\u003c/span\u003e\u003cspan class=\"vm\"\u003e$false\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eNow, we can put the hammer away, and proceed to deploy the module we originally required, this time without challenge.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eInstall-Module\u003c/span\u003e \u003cspan class=\"n\"\u003e-name\u003c/span\u003e \u003cspan class=\"n\"\u003epester\u003c/span\u003e \u003cspan class=\"n\"\u003e-MinimumVersion\u003c/span\u003e \u003cspan class=\"mf\"\u003e4.3\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e0\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eHappy Testing\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Waking Deamons",
        "date_published" : "2019-01-14T00:00:00Z",
        "date_modified" : "2019-01-14T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/waking-deamons/",
        "url" : "https://damianflynn.github.io/posts/waking-deamons/",
        "summary": " With a multitude of Raspberry PI’s deployed around the house, each taking a dedicated duty in ensuring that services run transparently; It is not uncommon for me to discover the initialization scripts designed to have these services auto start at boot is not working.\nThe content of this post is a reference for different methods which can be employed to resolve these stubborn daemons; which always are to fond of reappearing after an unplanned outage; or what is more commonly referred to as a Power Failure!\n",
        "content_html" : "\u003chr\u003e\n\u003cp\u003eWith a multitude of Raspberry PI’s deployed around the house, each taking a dedicated duty in ensuring that services run transparently; It is not uncommon for me to discover the initialization scripts designed to have these services auto start at boot is not working.\u003c/p\u003e\n\u003cp\u003eThe content of this post is a reference for different methods which can be employed to resolve these stubborn daemons; which always are to fond of reappearing after an unplanned outage; or what is more commonly referred to as a Power Failure!\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"rclocal\"\u003e\u003ca href=\"#rclocal\" class=\"header-mark\" aria-label=\"Header mark for 'rc.local'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"rclocal\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  rc.local\n\u003c/h1\u003e\n\u003cp\u003eTo start a program on your Linux distribution \u003cem\u003e(I am focusing on Raspbian running on a Raspberry Pi)\u003c/em\u003e at start-up, before other services are started, we will use the file \u003ccode\u003erc.local\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"editing-rclocal\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Editing rc.local\n\u003c/h2\u003e\n\u003cp\u003eOn your Pi, using \u003cem\u003enano\u003c/em\u003e or \u003cem\u003evi\u003c/em\u003e which are installed by default, using elevated permissions trough \u003cem\u003esudo\u003c/em\u003e, we will edit the file \u003ccode\u003e/etc/rc.local\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo nano /etc/rc.local\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAdd commands to execute the program, using absolute path references of the file location.\u003c/p\u003e\n\u003cp\u003eThe final command in the file should be \u003ccode\u003eexit 0\u003c/code\u003e to indicate to the OS that we are terminating without error, then save the file and exit.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## Start our Node Application\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo node /usr/local/bin/cgateweb/index.js\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eexit\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eProgram which are not expected to terminate, \u003cem\u003e(runs continuously in an infinite loop)\u003c/em\u003e should be stated as a forked process by adding an ampersand \u003ccode\u003e\u0026amp;\u003c/code\u003e to the end of the command. Failure to address this scenario will prevent the OS from completing its boot process.\u003c/p\u003e\n\u003cp\u003eThe ampersand allows the command to run in a separate process and continue booting with the main process running.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo node /usr/local/bin/cgateweb/index.js \u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eNote: A script added to /etc/rc.local is added to the OS boot sequence. A bug here will prevent the OS boot sequence progressing. Recommend that the script’s output and error messages are directed to a text file for debugging.\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-4\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo node /usr/local/bin/cgateweb/index.js \u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e \u0026gt; /var/log/myservice.log 2\u0026gt;\u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"bashrc\"\u003e\u003ca href=\"#bashrc\" class=\"header-mark\" aria-label=\"Header mark for '.bashrc'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"bashrc\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  .bashrc\n\u003c/h1\u003e\n\u003cp\u003eThe \u003ccode\u003e.bashrc\u003c/code\u003e file executes on boot and \u003cem\u003ealso\u003c/em\u003e every time when a new terminal is opened, or when a new SSH connection is made.\u003c/p\u003e\n\u003cp\u003eNormally, we would spawn our program, by placing the command at the bottom of \u003ccode\u003e/home/pi/.bashrc\u003c/code\u003e file. The program can be aborted with ‘ctrl-c’ while it is running!\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-5\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo nano /home/pi/.bashrc\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAdd commands to execute the program, using absolute path references of the file location.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-6\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e Running at boot\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo node /usr/local/bin/cgateweb/index.js \u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThe echo statement above is used to show that the commands in \u003ccode\u003e.bashrc\u003c/code\u003e file are executed on bootup as well as connecting to bash console.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"initd-directory\"\u003e\u003ca href=\"#initd-directory\" class=\"header-mark\" aria-label=\"Header mark for 'init.d directory'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"initd-directory\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  init.d directory\n\u003c/h1\u003e\n\u003cp\u003eThe \u003ccode\u003e/etc/init.d\u003c/code\u003e directory contains the scripts which are started during the boot process, and also during the shutdown or reboot process.\u003c/p\u003e\n\u003cp\u003eCreate a new file in the \u003ccode\u003e/etc/init.d\u003c/code\u003e directory\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-7\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e /etc/init.d\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo nano sample.py\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eWith the following sample content, we define a \u003cem\u003eLinux Standard Base (LSB)\u003c/em\u003e (A standard for software system structure, including the filesystem hierarchy used in the Linux operating system) \u003cem\u003einit\u003c/em\u003e script.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-8\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# /etc/init.d/sample.py\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e### BEGIN INIT INFO\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Provides:          sample.py\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Required-Start:    $remote_fs $syslog\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Required-Stop:     $remote_fs $syslog\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Default-Start:     2 3 4 5\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Default-Stop:      0 1 6\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Short-Description: Start daemon at boot time\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Description:       Enable service provided by daemon.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e### END INIT INFO\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003cem\u003einit.d\u003c/em\u003e scripts require the above runtime dependencies to be documented so that it is possible to verify the current boot order, the order the boot using these dependencies, and run boot scripts in parallel to speed up the boot process.\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eLSB Init Scripts guide.\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cp\u003eFinally, the script in the \u003ccode\u003e/etc/init.d\u003c/code\u003e directory should be executable, and added to the init database with the following commands:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-9\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo chmod +x sample.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo update-rc.d sample.py defaults\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"systemd\"\u003e\u003ca href=\"#systemd\" class=\"header-mark\" aria-label=\"Header mark for 'SystemD'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"systemd\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  SystemD\n\u003c/h1\u003e\n\u003cp\u003e\u003ccode\u003esystemd\u003c/code\u003e provides a standard process for controlling what programs run when a Linux system boots up.\u003c/p\u003e\n\u003cp\u003eA sample \u003cem\u003eunit\u003c/em\u003e file is provided by default in the OS, located at \u003ccode\u003e/lib/systemd/system/sample.service\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-10\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo cp /lib/systemd/system/sample.service /lib/systemd/system/my.service\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo nano /lib/systemd/system/my.service\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eWith a copy of the sample file, we define a new service called \u003cem\u003eSample Service\u003c/em\u003e and we are requesting that it is launched once the multi-user environment is available.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eExecStart\u003c/strong\u003e parameter specifies the command we want to run.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eType\u003c/strong\u003e set to \u003ccode\u003eidle\u003c/code\u003e to ensure that the \u003cem\u003eExecStart\u003c/em\u003e command is run only when everything else has loaded.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eNote: Paths are absolute and define the complete location of the runtime and any input files\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-11\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003eUnit\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eDescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eMy Sample Service\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eAfter\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003emulti-user.target\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003eService\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eType\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eidle\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eExecStart\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/usr/bin/node /usr/local/bin/cgateweb/index.js\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003eInstall\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eWantedBy\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003emulti-user.target\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eIn order to store the output in a log file you can change the \u003cem\u003eExecStart\u003c/em\u003e as follows:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-12\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eExecStart\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/usr/bin/node /usr/local/bin/cgateweb/index.js \u0026gt; /var/log/myservice.log 2\u0026gt;\u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThe permission on the unit file needs to be set to 644, and then we can tell \u003cem\u003esystemd\u003c/em\u003e to start it during the boot sequence.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-13\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo chmod \u003cspan class=\"m\"\u003e644\u003c/span\u003e /lib/systemd/system/my.service\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl daemon-reload\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl \u003cspan class=\"nb\"\u003eenable\u003c/span\u003e my.service\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"crontab\"\u003e\u003ca href=\"#crontab\" class=\"header-mark\" aria-label=\"Header mark for 'crontab'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"crontab\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  crontab\n\u003c/h1\u003e\n\u003cp\u003eCrontab is a table used by \u003ccode\u003ecron\u003c/code\u003e which is a daemon used to run specific commands at a particular time. Crontab is very flexible and can also run a program at boot or to repeat a task or program at specific times.\u003c/p\u003e\n\u003cp\u003eCreate a script to bootstrap our program\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-14\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo nano /home/pi/.scripts/myProgram.sh\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eand then add the command you wish to execute\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-15\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/usr/bin/node /usr/local/bin/cgateweb/index.js \u0026gt; /var/log/myservice.log 2\u0026gt;\u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eNow open crontab. You most likely will be required to open crontab with elevated permissions.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-16\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo crontab -e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAdd a new entry at the very bottom with \u003ccode\u003e@reboot\u003c/code\u003e to specify that you want to run the command at boot, followed by the command. Here we want to run our bootstrap script\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003etext\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-17\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e@reboot sudo /home/pi/.scripts/myProgram.sh\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eNow save the file and exit.\u003c/p\u003e\n\u003cp\u003eWhen you restart the pi, the command will be run and we will get the output log file.\u003c/p\u003e\n\u003cp\u003eBe a bit careful with the permissions and making sure that your program runs properly before you put it on boot: you can waste a lot of time trying to figure out what went wrong!\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-18\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egrep cron /var/log/syslog\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n",
        "language": "en"
    },
    {
        "title" : "Configure VS Code with Azure Cloud Shell",
        "date_published" : "2019-01-04T00:00:00Z",
        "date_modified" : "2019-01-04T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/configure-vs-code-with-azure-cloud-shell/",
        "url" : "https://damianflynn.github.io/posts/configure-vs-code-with-azure-cloud-shell/",
        "summary": " After years living in tools like Visual Studio, and PowerShell; Currently my primary landing ground is Visual Studio Code. With my target audience firmly defined as Azure; In this post I am going to share my notes on how to get these two tools working harmonisly; and to make the experience a little richer, we will also mount the underlying Cloud Drive File Share of the Azure Cloud Shell on our local computer as a PowerShell Drive (PSDrive).\n",
        "content_html" : "\u003chr\u003e\n\u003cp\u003eAfter years living in tools like Visual Studio, and PowerShell; Currently my primary landing ground is Visual Studio Code. With my target audience firmly defined as Azure; In this post I am going to share my notes on how to get these two tools working harmonisly; and to make the experience a little richer, we will also mount the underlying Cloud Drive File Share of the Azure Cloud Shell on our local computer as a PowerShell Drive (PSDrive).\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"azure-cloud-shell-in-visual-studio-code\"\u003e\u003ca href=\"#azure-cloud-shell-in-visual-studio-code\" class=\"header-mark\" aria-label=\"Header mark for 'Azure Cloud Shell in Visual Studio Code'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"azure-cloud-shell-in-visual-studio-code\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Azure Cloud Shell in Visual Studio Code\n\u003c/h1\u003e\n\u003cp\u003eIn VSCode we will naviagte to the \u003cstrong\u003eExtension\u003c/strong\u003e icon and search for \u003cstrong\u003eAzure Account\u003c/strong\u003e, then install it.\u003c/p\u003e\n\u003cp\u003eThe Azure Account extension provides a single Azure sign-in and subscription filtering experience for all other Azure extensions. This extension also exposes the \u003cem\u003eAzure’s Cloud Shell\u003c/em\u003e service in VS Code’s integrated terminal.\u003c/p\u003e\n\u003cp\u003eOnce the extension in installed you will see the button to \u003cstrong\u003eReload\u003c/strong\u003e your Visual Studio Code instance, which you must complete before we can proceed.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"sign-in-to-azure\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Sign In to Azure\n\u003c/h2\u003e\n\u003cp\u003eNow, Open the VS Code command palette (using the key sequence \u003cem\u003eCTRL, SHIFT + P\u003c/em\u003e or \u003cem\u003eF1\u003c/em\u003e) and select the option to Sign-in to your Azure Subscription; by typing \u003ccode\u003eAzure: Sign In\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eOnce you click on Sign-in, Visual Studio Code will launch your browser and you will be naviagted to login to your azure account. Select the appropiate account and complete the authentication process. Once authenticated, the browser window will confirm, and tell you to return to VS Code.\u003c/p\u003e\n\u003cp\u003eAs a confirmation of your autentication state, in the status bar of VS Code a new element which is prefixed with the word \u003cstrong\u003eAzure:\u003c/strong\u003e and postfixed with the account you just authenticated with will be presented.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"cloud-shell-in-vs-code\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Cloud Shell in VS Code\n\u003c/h2\u003e\n\u003cp\u003eNow that we are signed in, launch the VSCode command palette again (CTRL, SHIFT+P or F1), this time typing \u003ccode\u003eAzure: Open PowerShell in Cloud Shell\u003c/code\u003e or \u003ccode\u003eAzure: Open Bash in Cloud Shell\u003c/code\u003e\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eNote: This extension requires Node.JS; If not found on your system, you will be prompted to remediate.\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cp\u003eVSCode will update the status bar to indicate it is activating the extenstion, If your account is determined to have access to mulitple Azure AD Directories, you will be prompted to select the directory you wish to work in for this session from the drop down list.\u003c/p\u003e\n\u003cp\u003eAfter a few moments you will then observe the \u003cstrong\u003eTerminal\u003c/strong\u003e window launch, and the session will be be entitled as \u003cem\u003ePowerShell in Cloud Shell\u003c/em\u003e.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003epowershell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eSelect \u003c/span\u003e\u003cspan class=\"n\"\u003edirectory\u003c/span\u003e\u003cspan class=\"p\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eRequesting\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003eCloud\u003c/span\u003e \u003cspan class=\"n\"\u003eShell\u003c/span\u003e\u003cspan class=\"p\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eConnecting\u003c/span\u003e \u003cspan class=\"n\"\u003eterminal\u003c/span\u003e\u003cspan class=\"p\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eWelcome\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003eAzure\u003c/span\u003e \u003cspan class=\"n\"\u003eCloud\u003c/span\u003e \u003cspan class=\"n\"\u003eShell\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eType \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;az\u0026#34;\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003euse\u003c/span\u003e \u003cspan class=\"n\"\u003eAzure\u003c/span\u003e \u003cspan class=\"nb\"\u003eCLI \u003c/span\u003e\u003cspan class=\"mf\"\u003e2.0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eType \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;help\u0026#34;\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003elearn\u003c/span\u003e \u003cspan class=\"n\"\u003eabout\u003c/span\u003e \u003cspan class=\"n\"\u003eCloud\u003c/span\u003e \u003cspan class=\"n\"\u003eShell\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eVERBOSE\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eAuthenticating\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003eAzure\u003c/span\u003e \u003cspan class=\"p\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eVERBOSE\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eBuilding\u003c/span\u003e \u003cspan class=\"n\"\u003eyour\u003c/span\u003e \u003cspan class=\"n\"\u003eAzure\u003c/span\u003e \u003cspan class=\"n\"\u003edrive\u003c/span\u003e \u003cspan class=\"p\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eAzure\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"nb\"\u003ePS \u003c/span\u003e\u003cspan class=\"n\"\u003eAzure\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e\u003cspan class=\"p\"\u003e\\\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"mount-azure-cloud-shell-drive-locally\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Mount Azure Cloud Shell drive Locally\n\u003c/h2\u003e\n\u003cp\u003eFor the best flexibility you will regularly have the requirement of interacting with the files in the Cloud Drive, directly from your local working environment.\u003c/p\u003e\n\u003cp\u003eLaunch your browser, and authenticate to \u003ca href=\"https://portal.azure.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehttps://portal.azure.com\u003c/a\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eLocate the \u003cem\u003eResource Group\u003c/em\u003e which contains the \u003cem\u003eCloud Shell Storage\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eOpen the \u003cem\u003eStorage Account\u003c/em\u003e and select the \u003cem\u003eFiles Service\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eInspect the names of the presented File Shares, and select the name which contains your chosen authentication account, eg \u003cstrong\u003ecs-technology-damianflynn-com-1001100110011001\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eFinally, On the \u003cem\u003eFile share\u003c/em\u003e blade, you will select the ‘Connect’ button, which will present a new blade to the right of the window.\u003c/li\u003e\n\u003cli\u003eIn the blade, choose a \u003cstrong\u003eDrive letter\u003c/strong\u003e and then copy the auto-generated PowerShell Commands to map your Cloud Drive.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eIn a powershell session on your local machine, paste the copied commands; which will automatically mount the cloud drive to your chosen drive letter on your local computer.\u003c/p\u003e\n\u003cp\u003eFrom here you can now access and interact with the cloud drive, making changes which will appear real time in the Cloud Shell.\u003c/p\u003e\n\u003cp\u003eEnjoy!\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Welcome to 2019",
        "date_published" : "2019-01-02T00:00:00Z",
        "date_modified" : "2019-01-02T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/welcome-to-2019/",
        "url" : "https://damianflynn.github.io/posts/welcome-to-2019/",
        "summary": " First, allow me to thank all of you that are continuing to read this blog; despite the drought which I am predicting has now passed. I have a long list of topics which I wish to address in detail throughout the year; focused on the areas which I am most passionate.\nSpeaking Last year I had the opportunity to meet a lot of you in various parts of the globe, primarily speaking at some significant events; including the ‘Nordic NIC Conference’, ‘Cloud and Datacenter Conference’, ‘Tech Camp’ and ‘Experts Live’.\n",
        "content_html" : "\u003chr\u003e\n\u003cp\u003eFirst, allow me to thank all of you that are continuing to read this blog; despite the drought which I am predicting has now passed. I have a long list of topics which I wish to address in detail throughout the year; focused on the areas which I am most passionate.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"speaking\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Speaking\n\u003c/h2\u003e\n\u003cp\u003eLast year I had the opportunity to meet a lot of you in various parts of the globe, primarily speaking at some significant events; including the ‘Nordic NIC Conference’, ‘Cloud and Datacenter Conference’, ‘Tech Camp’ and ‘Experts Live’.\u003c/p\u003e\n\u003cp\u003eI am somewhat disappointed to have learned that after 3 years presenting at the NIC Conference, this year I wont be returning, due to concerns of competition \u003cem\u003e(community spirit?)\u003c/em\u003e as I am involved with the management of the Azure Track for the new \u003cstrong\u003eExperts Live Norway\u003c/strong\u003e event; happening on \u003cem\u003eMay 29th in Oslo\u003c/em\u003e!\u003c/p\u003e\n\u003cp\u003eI have been accepted to present at some different conferences throughout 2019; most specifics a little later.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"azure\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Azure\n\u003c/h2\u003e\n\u003cp\u003eWorking with Azure Infrastructure on a daily basis; I have much to share related to many exciting technologies including \u003cem\u003eTerraform\u003c/em\u003e, \u003cem\u003eAzure Resource Manager\u003c/em\u003e, \u003cem\u003eDevOps Pipelines\u003c/em\u003e, \u003cem\u003ePolicies\u003c/em\u003e, and \u003cem\u003eGovernance\u003c/em\u003e\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"iot\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  IoT\n\u003c/h2\u003e\n\u003cp\u003eAfter much fun during Christmas, I also plan to share some insights into Home Automation and related technologies; Some of these are foundational, and leverage open source offers including \u003cem\u003eOpenHAB\u003c/em\u003e and \u003cem\u003eHome-Assistant\u003c/em\u003e; others integrate directly with Azure to leverage the IoT hub and AI services which it has to offer trough standards like MQTT.\u003c/p\u003e\n\u003cp\u003eI also anticipate covering some more device-specific technologies; including a standard from my past \u003cem\u003eDMX512\u003c/em\u003e, which has evolved to a new cool standard \u003cem\u003ee1.31\u003c/em\u003e. Hint - From Dj Lights to Christmas Lights; but don’t worry; I promise to decrypt is jargon on the way!\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"roll-on-2019\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Roll On 2019\n\u003c/h2\u003e\n\u003cp\u003eIf you have any topics or questions which you believe I should be able to help explain, or should be considered as topics for some posts, presentations or webinars; then please do let me know; either via mail, twitter or comments on this blog.\u003c/p\u003e\n\u003cp\u003eSlainte!\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Fixing Calendar Chaos",
        "date_published" : "2018-12-12T00:00:00Z",
        "date_modified" : "2018-12-12T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/fixing-calendar-chaos/",
        "url" : "https://damianflynn.github.io/posts/fixing-calendar-chaos/",
        "summary": " Assuringly I am not alone, when we sit down as a family and talk about our day, and the plan for the next days or the weekend; only to realise that we have some real scheduling issues; because you totally forgot that you would take the children to an event; while your partner had a long-standing appointment with the hairdresser.\nLetting this happen once or twice, is forgivable, but happing on a regular basis; is the recipe for a lousy dispute; that we do not need.\n",
        "content_html" : "\u003chr\u003e\n\u003cp\u003eAssuringly I am not alone, when we sit down as a family and talk about our day, and the plan for the next days or the weekend; only to realise that we have some real scheduling issues; because you totally forgot that you would take the children to an event; while your partner had a long-standing appointment with the hairdresser.\u003c/p\u003e\n\u003cp\u003eLetting this happen once or twice, is forgivable, but happing on a regular basis; is the recipe for a lousy dispute; that we do not need.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"synchronising-schedules\"\u003e\u003ca href=\"#synchronising-schedules\" class=\"header-mark\" aria-label=\"Header mark for 'Synchronising Schedules'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"synchronising-schedules\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Synchronising Schedules\n\u003c/h1\u003e\n\u003cp\u003eThe solution, of course, is simple, We need to share some visibility of our schedules, and of course be consistent in making sure that we record these events in the calendar in the first place.\u003c/p\u003e\n\u003cp\u003eThe problem is, however, what calendar do we use, and NO; a whiteboard stuck to the fridge or some other silly place is not an option.\u003c/p\u003e\n\u003cp\u003eThis is a digital era, and I need a digital solution; as I can not predict where I might be when I agree with that business trip, or customer call which stomps all over that crucial other thing that I have now entirely forgotten about, and its not possible to run from Oslo to my Fridge door to check!\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"environment-survey\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Environment Survey\n\u003c/h2\u003e\n\u003cp\u003eFirst, I need to determine what are the artefacts I am dealing with here;\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"the-actors\"\u003e\u003ca href=\"#the-actors\" class=\"header-mark\" aria-label=\"Header mark for 'The Actors'\"\u003e\u003c/a\u003e\n    The Actors\n\u003c/h3\u003e\n\n\u003cul\u003e\n\u003cli\u003eMy Wife\n\u003cul\u003e\n\u003cli\u003eHer Schedule\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eMyself\n\u003cul\u003e\n\u003cli\u003eMy Work Schedule, including Trips, Workshops and Meetings\u003c/li\u003e\n\u003cli\u003eMy MVP Schedule, including Product Calls, Meetups, Conferences, Community Time\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e2 Children\n\u003cul\u003e\n\u003cli\u003ePre-School, Appointments, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFamily Unit\n\u003cul\u003e\n\u003cli\u003eOutings, Appointments, Events, Games, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"the-actions\"\u003e\u003ca href=\"#the-actions\" class=\"header-mark\" aria-label=\"Header mark for 'The Actions'\"\u003e\u003c/a\u003e\n    The Actions\n\u003c/h3\u003e\n\n\u003cp\u003eNow, Let’s consider the unconscious actions we take\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMy Wife\n\u003cul\u003e\n\u003cli\u003eiPhone to update her Calendar\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eMyself\n\u003cul\u003e\n\u003cli\u003eOutlook primarily to manage both Work and MVP schedules\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eGoogle/Alexa/Siri\n\u003cul\u003e\n\u003cli\u003eShout at these devices to update the Family calendar\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"the-objective\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  The Objective\n\u003c/h2\u003e\n\u003cp\u003eThe vision is simple:\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eSituation\u003c/th\u003e\n          \u003cth\u003eRequirements\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eFor Work\u003c/td\u003e\n          \u003ctd\u003eEnsure my calendar, offers a true representation of when I am available. Assist my colleagues and customers to not inadvertently stomp on time which I planned to use for other activities; for example, that dentist appointment.\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePersonal\u003c/td\u003e\n          \u003ctd\u003eUsing the digital assistants, phone, watch, etc.; Maintain an up-to-date view of what my day or week truly looks like, including Personal, Family, Work and MVP appointments\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eWife\u003c/td\u003e\n          \u003ctd\u003eRequires a view of when I might be otherwise busy; so she can plan around me, when and if necessary\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eFamily\u003c/td\u003e\n          \u003ctd\u003eEasily setup events, while being aware of any potential conflicts which might arise, and address appropriately.\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"the-approach\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  The approach\n\u003c/h2\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"family-calendar\"\u003e\u003ca href=\"#family-calendar\" class=\"header-mark\" aria-label=\"Header mark for 'Family Calendar'\"\u003e\u003c/a\u003e\n    Family Calendar\n\u003c/h3\u003e\n\n\u003cp\u003eUsing the shared Family calendar features offered by many of the consumer-focused cloud offerings; leverage these services, so that shared appointments are visible; while managing out own independent personal scheduled.\u003c/p\u003e\n\u003cp\u003eWhile both my wife and I are currently iPhone users; there is no guarantee that this will always be the case; especially looking at the inflation on the newest models. Accessing the iCloud Calendars outside the Apple ecosystem is not a fantastic experience.\u003c/p\u003e\n\u003cp\u003eCombined with the desire to leverage Siri, Alexa and Google Assistant; my current conclusion is that the best-supported Calendar for families, for free is \u003cem\u003eGoogle Calendar\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003eTherefore with existing Gmail accounts, we established a Family relationship and gained the shared family calendar feature.\u003c/p\u003e\n\u003cp\u003eAdditionally, we Invited each other to our \u003cem\u003epersonal calendars\u003c/em\u003e so we can see the potential conflicts which may arise\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"my-work-calendars\"\u003e\u003ca href=\"#my-work-calendars\" class=\"header-mark\" aria-label=\"Header mark for 'My Work Calendars'\"\u003e\u003c/a\u003e\n    My Work Calendars\n\u003c/h3\u003e\n\n\u003cp\u003eOthers essentially manage my Work and MVP Calendars; as they set meetings, appointments and so on, which I usually am obliged to join. I have kept these two environments independent; mainly due to the NDA’s which I have signed which results in lots of sensitive emails flowing which I am not comfortable being managed by other mail administrators \u003cem\u003e(I wore that hat long enough to understand the potential access available)\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eUsing Microsoft Flow, I created three flows to synchronise these schedules\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eSync Work calendar to my Personal Google Calendar\u003c/li\u003e\n\u003cli\u003eSync MVP calendar to my Personal Google Calendar\u003c/li\u003e\n\u003cli\u003eSync Family Google Calendar appointments to Work Calendar \u003cem\u003e[as Time Blockers]\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eSync MVP calendar to my Work Calendar \u003cem\u003e[as Time Blockers]\u003c/em\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"the-big-picture\"\u003e\u003ca href=\"#the-big-picture\" class=\"header-mark\" aria-label=\"Header mark for 'The Big Picture'\"\u003e\u003c/a\u003e\n    The Big Picture\n\u003c/h3\u003e\n\n\u003cp\u003eNow with the boundaries defined, and the flows described, let’s visualise this challenge\u003c/p\u003e\n\u003cpre class=\"mermaid\"\u003egraph TD\n  subgraph Google Calanders\n  C[\u003cb\u003eMy Schedule\u003c/b\u003e\u003cbr\u003e\u003ci\u003eMy Personal\u003cbr\u003eGoogle Calander\u003c/i\u003e]\n  G[\u003cb\u003eWifes Schedule\u003c/b\u003e\u003cbr\u003e\u003ci\u003eHer Personal\u003cbr\u003eGoogle Calander\u003c/i\u003e]\n  D(\u003cb\u003eFamily\u003c/b\u003e\u003cbr\u003e\u003ci\u003eShared Family\u003cbr\u003eGoogle Calander\u003c/i\u003e)\n  end\n\n  subgraph My Calanders\n  A[\u003cb\u003eMVP Calander\u003c/b\u003e\u003cbr\u003e\u003ci\u003eOffice 365\u003c/i\u003e]\n  B[\u003cb\u003eWork Calander\u003c/b\u003e\u003cbr\u003e\u003ci\u003eOffice 365\u003c/i\u003e]\n  end\n\n  E(\u003cb\u003eMy Assistants Profile\u003c/b\u003e\u003cbr\u003e\u003ci\u003eGoogle/Alexa/Siri\u003c/i\u003e)\n  F(\u003cb\u003eWife Assistants Profile\u003c/b\u003e\u003cbr\u003e\u003ci\u003eGoogle/Alexa/Siri\u003c/i\u003e)\n\n  A -.-\u003e|Flow\u003cbr\u003e\u003cb\u003eMVP Blockers to Work\u003c/b\u003e|B\n  A --\u003e|Flow\u003cbr\u003e\u003cb\u003eMVP to My Schedule\u003c/b\u003e|C\n  B --\u003e|Flow\u003cbr\u003e\u003cb\u003eWork to My Schedule\u003c/b\u003e|C\n\n  C -.- D\n  D --\u003e|Flow\u003cbr\u003e\u003cb\u003eFamily Blockers to Work\u003c/b\u003e| B\n  E --\u003e|New Bookings\u003cbr\u003eFamily Calander|D\n  C --\u003e|Presented Schedule\u003cbr\u003eInc Family Calander| E\n\n  G -.- D\n  F --\u003e|New Bookings\u003cbr\u003eFamily Calander|D\n  G --\u003e|Presented Schedule\u003cbr\u003eInc Family Calander| F\n\u003c/pre\u003e\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"setting-up\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Setting Up\n\u003c/h2\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"google-calender\"\u003e\u003ca href=\"#google-calender\" class=\"header-mark\" aria-label=\"Header mark for 'Google Calender'\"\u003e\u003c/a\u003e\n    Google Calender\n\u003c/h3\u003e\n\n\u003cp\u003eUsing the existing Google accounts which you may have, establish a \u003cem\u003eFamily\u003c/em\u003e Relationship\u003c/p\u003e\n\u003cp\u003eNext, Invite each party in the family to have read access at least to each other’s calendar.\u003c/p\u003e\n\u003cp\u003eTurn off notifications on these calendars if they are not your primary calendar. In my scenario I already get notifications from Work and MVP; so do not need duplicate notifications from Google also. My Wife, on the other hand, is using Google as her primary, so does still want notifications.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"configuring-iphone\"\u003e\u003ca href=\"#configuring-iphone\" class=\"header-mark\" aria-label=\"Header mark for 'Configuring iPhone'\"\u003e\u003c/a\u003e\n    Configuring iPhone\n\u003c/h3\u003e\n\n\u003cp\u003eUsing the IOS Settings App, the following is how I set up both our iPhones.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSettings\n\u003cul\u003e\n\u003cli\u003ePasswords \u0026amp; Accounts\n\u003cul\u003e\n\u003cli\u003eAdd Account\n\u003cul\u003e\n\u003cli\u003eGoogle\n\u003cul\u003e\n\u003cli\u003eAuthenticate\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSelect Gmail\n\u003cul\u003e\n\u003cli\u003eEnable Calander\u003c/li\u003e\n\u003cli\u003eEnable Contacts\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eCalander\n\u003cul\u003e\n\u003cli\u003eDefault Calendar\n\u003cul\u003e\n\u003cli\u003eFamily\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eContacts\n\u003cul\u003e\n\u003cli\u003eDefault Account\n\u003cul\u003e\n\u003cli\u003eGmail\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFor my phone, I use the Outlook App as the owner of both MVP and Work Mail and Calendars; As Siri has no access in here, only the Google Calendars are linked at the OS level, exposing the data to the native Calander app, and therefore Siri.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"google-assistant--alexa\"\u003e\u003ca href=\"#google-assistant--alexa\" class=\"header-mark\" aria-label=\"Header mark for 'Google Assistant / Alexa'\"\u003e\u003c/a\u003e\n    Google Assistant / Alexa\n\u003c/h3\u003e\n\n\u003cp\u003eSet up personal profiles, and then Link to your Personal Gmail Account; this should then expose the shared calendars also.\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "My Journey to the Internet of Things",
        "date_published" : "2018-12-06T00:00:00Z",
        "date_modified" : "2018-12-06T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/my-journey-to-the-internet-of-things/",
        "url" : "https://damianflynn.github.io/posts/my-journey-to-the-internet-of-things/",
        "summary": " In a previous post, I referred to an embedded device which is called a NodeMCU. This device is a developer kit, designed to make it easy to develop and test programs for the embedded ESP8266 System on a Chip. Many manufacturers are offering both developer and production kits which leverage this SoC; including the Wemos D1, Lolin, and in my case the NodeMCU.\nThe function of these developer kits is to add some supporting features, for example, a USB to serial converter which makes programming a lot easier, in addition to a couple of buttons, and maybe an LED or two, for testing some simple scenarios with.\n",
        "content_html" : "\u003chr\u003e\n\u003cp\u003eIn a previous post, I referred to an embedded device which is called a \u003cstrong\u003eNodeMCU\u003c/strong\u003e. This device is a developer kit, designed to make it easy to develop and test programs for the embedded \u003cem\u003eESP8266 System on a Chip\u003c/em\u003e. Many manufacturers are offering both developer and production kits which leverage this SoC; including the Wemos D1, Lolin, and in my case the NodeMCU.\u003c/p\u003e\n\u003cp\u003eThe function of these developer kits is to add some supporting features, for example, a USB to serial converter which makes programming a lot easier, in addition to a couple of buttons, and maybe an LED or two, for testing some simple scenarios with.\u003c/p\u003e\n\u003cpre class=\"mermaid\"\u003egraph TD\n  A[ESP8266] --\u003e|Hosts| B[ESP12]\n  B --\u003e|Encapsulates| C[NodeMCU]\n  \n\u003c/pre\u003e\u003cp\u003eOnce your development efforts are at a stage ready for production, we can implement the \u003cem\u003eESP12\u003c/em\u003e module on custom circuit boards, designed for the specific scenarios you might be addressing. The cost of the models is meager and can be significantly reduced further based on the order size. For a tiny quantity of 10 unit’s, we will have change out of €15, after Postage and Packing.\u003c/p\u003e\n\u003cp\u003eThe developer board, is a little more expensive, for example you can grab these from many online suppliers including my link to Amazon, which offers two developer boards for €8, seriously not going to burst any banks here.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"some-history\"\u003e\u003ca href=\"#some-history\" class=\"header-mark\" aria-label=\"Header mark for 'Some History'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"some-history\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Some History\n\u003c/h1\u003e\n\u003cp\u003eSo why am I playing with these devices? I have been working on embedded technologies for over 30 years; starting with my first industrial deploying in a rubber injection moulding company, using a board from an American company called Tern, Inc; developing the code in \u003cem\u003eC\u003c/em\u003e, and running my own communications protocol across an RS485 network! This was way back in 1994! \u003cem\u003eNow, I am showing my age!\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eThe scenario at the time was to monitor the state of the Moulding press, ensure the safety guards were down while injection was happening, reporting temperature which has been managed by a Siemens PLC, and then using a digital scale, counting the number of rubber parts which were just created and placed in a plastic box.\u003c/p\u003e\n\u003cp\u003e30 years later, not a lot has changed, we still use conveyor belts, PLCs, digital scales, thermocouples, and so on; what has changed however…\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eThe computers have shrunk considerably\u003c/li\u003e\n\u003cli\u003eProtocols are now published and supported with free open-source libraries\u003c/li\u003e\n\u003cli\u003eProjects are shared so development can be accelerated, and new patterns and practices discovered and learnt\u003c/li\u003e\n\u003cli\u003eCosts have decreased, while reliability has increased.\u003c/li\u003e\n\u003cli\u003eData is preferred to be stored in large pool’s; exposing some amazing value attributes.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"learning\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Learning\n\u003c/h2\u003e\n\u003cp\u003eMy original deployment failed after a few weeks in live production, for reasons which are now very obvious, but at the time were not so transparent. Considering the environment, all the heavy 3-Phase machinery introduced a lot of noise, Not noise as in you should wear ear protection, but electrical noise, Spikes, and drops, which on a network of 2 twisted wires with no error handling; and a rudimentary communications protocol with nothing more than a CRC code for data blocks, resulted in some false data getting stored, or worse lost.\u003c/p\u003e\n\u003cpre class=\"mermaid\"\u003egraph TD\n  S1[Thermocouple]\n  S2[Light Curtain]\n  S3[Ram Position]\n  S4[Injector Pressure]\n  P1[PLC]\n  C1[Datalogger]\n  N1[RS485 Network]\n  O1[Optic Tx and Rx]\n  O2[Optic Tx and Rx]\n  P2[Data Aggregator]\n  B1[Business Presentation]\n  E1[Enterprise Resource Planner]\n\n  subgraph Moulding Press\n    S1 --\u003e P1\n    S2 --\u003e P1\n    S3 --\u003e P1\n    S4 --\u003e P1\n    subgraph Datalogger\n      P1 --\u003e C1\n      S1 -.- C1\n    end\n  end\n\n  P1 --\u003e N1\n  N1 --\u003e O1\n  N1 --\u003e O2\n  O1 --\u003e P2\n  O2 --\u003e P2\n  P2 --\u003e B1\n  P2 --\u003e E1\n\u003c/pre\u003e\u003cp\u003eThe fix at the time was costly. Firstly, the network required to be insulated; trough both software (firmware) updates to harden the protocol, and better error handling; along with physical shielding from the noise base; In the worst areas of the factory, the copper RS485 network had to be redeployed with optical cables, which transmitted the signal using couplers and decouplers. Very cool stuff back then.\u003c/p\u003e\n\u003cpre class=\"mermaid\"\u003egraph LR\n  S1[Thermocouple]\n  S2[Light Curtain]\n  S3[Ram Position]\n  S4[Injector Pressure]\n  P1[PLC]\n  C1[Datalogger]\n  N1[RS485 Network]\n  O1[Optic Tx and Rx]\n  O2[Optic Tx and Rx]\n  P2[Data Aggregator]\n  B1[Business Presentation]\n  E1[Enterprise Resource Planner]\n\n  subgraph Moulding Press\n    S1 --\u003e P1\n    S2 --\u003e P1\n    S3 --\u003e P1\n    S4 --\u003e P1\n    subgraph Datalogger\n      P1 --\u003e C1\n      S1 -.- C1\n    end\n  end\n\n  subgraph RS485 Network\n    C1 --\u003e N1\n    subgraph Optic Overlay\n      C1 -.- O1\n      O1 -.- N1\n      N1 -.- O2\n      O2 -.- P2\n    end\n    N1 --\u003e P2\n  end\n\n  subgraph Resource Planning\n    P2 --\u003e B1\n    B1 --\u003e E1\n  end\n\u003c/pre\u003e\u003cp\u003eAfter some painful weeks, the solution was stabilized and happily ran for many years, and well after I had left the company.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"retrospective-thoughts\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Retrospective Thought’s\n\u003c/h2\u003e\n\u003cp\u003eWhile this solution completely changed the efficiency of the production line, and provided end to end visibility of work at all its stages in the manufacturing pipeline; the super important business data was locked tightly behind the code, and only leveraged to illuminate the insights from data which was determined to be of business value in a fixed set of scenarios.\u003c/p\u003e\n\u003cp\u003eUpdates were tedious; considering every data collector had to be individually re-flashed with a new firmware in-situ. Considering that every update was guaranteed to change the data payload, as new sensors were introduced or retired; then the only option was to shutdown the complete solution for the duration of the update; followed by a number of test cycles, before finally bringing everything up; which of course had to be in the correct sequence. Oh, and the Plant ran 3 Shifts, each 8 hours, for 5 days a week, and some weekends on a Saturday depending on demand pressures. This of course translated to your truly working a lot of Sunday’s, and Early Monday’s for the first shift to commence\u003c/p\u003e\n\u003cp\u003eIn today’s world the architecture would be much more modular, with the data been deposited into a large pool; and interrogated by subject matter experts to gain insights which are relevant to a particular business scenario, or process. However when a new perspective on a situation might be required; then with open access to all the data points, that subject matter expert can dip into the pool, and evaluate the data to expose the results specific to their case.\u003c/p\u003e\n\u003cp\u003eAttempting to achieve this at the time would, well, likely have cost more than one of those moulding presses; and require that all the operators had degrees in computer science related fields.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"the-iot-approach\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  The IoT Approach\n\u003c/h2\u003e\n\u003cp\u003eIf we were challenged with this sample problem 30 years on, how would we approach the project?\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eI certainly promise, I will not be writing my own communication Protocols again; there is no requirement to reinvent the wheel.\u003c/li\u003e\n\u003cli\u003eData collectors have not changed a lot. Of course, they will be faster and more accurate, but a thermocouple is still a thermocouple.\u003c/li\u003e\n\u003cli\u003eNew collectors types with much richer data, cameras for example; including heat, night vision, spectral, high speed, high resolution and so on.\u003c/li\u003e\n\u003cli\u003eInteracting with the collectors, is essentially reduced to a single line of code, thanks to the ecosystem of libraries.\u003c/li\u003e\n\u003cli\u003eData would be all pooled securely, enabling the correct people, services and technologies access, to build new business models.\u003c/li\u003e\n\u003cli\u003eData models packaged into light payloads, JSON, MQTT, etc.\u003c/li\u003e\n\u003cli\u003eNo more nightmares of In-Situ updates; Over the Air, self applying firmwares\u003c/li\u003e\n\u003cli\u003eSecure Data communications, shielding and transports\u003c/li\u003e\n\u003cli\u003eStaggered updates; with no system wide downtime, or sensitive startup dependencies\u003c/li\u003e\n\u003cli\u003eScale, Scale, Scale\u003c/li\u003e\n\u003cli\u003eFail Fast\u003c/li\u003e\n\u003cli\u003eChange Management and DevOps\u003c/li\u003e\n\u003cli\u003eAnd so on…\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe evolution is real, yet so much is still very familiar.\u003c/p\u003e\n\u003cp\u003eBusiness logic Encapsulated as separate and distinct micro-services, ensuring a platform that can scale, while leveraging the correct tools at any point in time to address a scenario; enabling new and old approaches to be conducted in parallel, risk-free\u003c/p\u003e\n\u003cpre class=\"mermaid\"\u003egraph LR\n  S1[Thermocouple]\n  S2[Light Curtain]\n  S3[Ram Position]\n  S4[Injector Pressure]\n  S5[Camera]\n  P1[PLC]\n  IOT1[IoT Device]\n  IOT2[IoT Edge Device]\n  N1[Network Cloud]\n  P2[Data Aggregator Stream Hub]\n  B1[Stream Analytics]\n  B2[Event Hubs]\n  B3[Data Lake]\n  E1[Enterprise Resource Planner]\n\n  subgraph Moulding Press\n    S1 --\u003e IOT1\n    S2 --\u003e IOT1\n    S3 --\u003e IOT1\n    S4 --\u003e IOT2\n    S5 --\u003e IOT2\n    P1 --\u003e IOT2\n  end\n\n  subgraph Network\n    IOT1 --\u003e|IoT communications| N1\n    IOT2 --\u003e|Edge processing| N1\n    N1 --\u003e|Data Stream MQTT Hub| P2\n  end\n\n  subgraph Business Logic\n    P2 --\u003e B1\n    B1 -.- E1\n    P2 --\u003e B2\n    P2 --\u003e B3\n  end\n\u003c/pre\u003e\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"tooling-up\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Tooling Up\n\u003c/h2\u003e\n\u003cp\u003eTaking a leave from my beloved memories of \u003cem\u003eBorland’s Turbo C\u003c/em\u003e IDE and compiler; \u003cem\u003e(Which, I still have in my display cabinet,)\u003c/em\u003e accompanied with its collection of 2 3.5” floppy disks, and the now almost defunct RS232 serial cable behind, how do we approach these new developer kits for embedded IoT devices?\u003c/p\u003e\n\u003cp\u003ePretty simple actually. Regardless of your OS platform, you can now leverage the rich ecosystems which these kits have established; you simply need to decide on what environment you wish to leverage and get started.\u003c/p\u003e\n\u003cp\u003eBut be warned, when I started with the \u003cem\u003eTern, Inc.\u003c/em\u003e boards, there was only \u003cstrong\u003eone\u003c/strong\u003e choice, the SDK was licensed for use with the specific board; today, however, this is not the case, and before you start on your first line of code, you can easily be overwhelmed.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"hardware\"\u003e\u003ca href=\"#hardware\" class=\"header-mark\" aria-label=\"Header mark for 'Hardware'\"\u003e\u003c/a\u003e\n    Hardware\n\u003c/h3\u003e\n\n\u003cp\u003eOver the years a number of different standards have developed and evolved. One of the richest and possibly best know is that of \u003cstrong\u003eArduino\u003c/strong\u003e; which is a family of boards with an amazing eco-system of supporting libraries; shapes, sizes, and purposes.\u003c/p\u003e\n\u003cp\u003eHowever, Prior to spending time with this family, I actually went \u003cem\u003e100% Nerd\u003c/em\u003e, and choose to develop on the \u003cstrong\u003eMicroChip PIC\u003c/strong\u003e series CPUs; which were 100% chips, and required a special programmer to flash the chip, in my real early days these were based on EPROMS (which could only be reset, by playing them in a special UV drawer), and later the cooler EEPROMS which had an Electronic Erase option on the Programable Read Only Memory. Debugging was a different story; in this case I had a RICE Device, which was an expensive ‘thing’ that enabled step by step debugging of the code been flashed; however most of the time, this was totally without any of the real inputs which would ultimately be connected to the circuit.\u003c/p\u003e\n\u003cp\u003eThere are other boards, which I will take a closer look at on this journey; including the \u003cem\u003eMicrosoft IoT SDK board\u003c/em\u003e, which is known as the \u003cstrong\u003eMX Chip\u003c/strong\u003e, essentially also a developer board, but with a boot load of additional inputs and outputs.\u003c/p\u003e\n\u003cp\u003eAnd of course, the board which I am still waiting patiently to arrive, the \u003cem\u003eMicrosoft Azure Sphere board\u003c/em\u003e.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"development-environments\"\u003e\u003ca href=\"#development-environments\" class=\"header-mark\" aria-label=\"Header mark for 'Development Environments'\"\u003e\u003c/a\u003e\n    Development Environments\n\u003c/h3\u003e\n\n\u003cp\u003eWhen I first started playing with these \u003cstrong\u003eArduino\u003c/strong\u003e based systems, I of course made the default choice of development tools, and embraced the cumbersome Arduino IDE; which in many ways is still far less flexible than my fond memories of Borland’s IDE.\u003c/p\u003e\n\u003cp\u003eI quickly focused on VS Code, to use its extension for the Arduino IDE; which in all due respect is a really fantastic effort, and a revolutionary step forward, but due to its total dependency on the Arduino IDE been still installed, there are still a lot of irritable behaviors.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"platformio\"\u003e\u003ca href=\"#platformio\" class=\"header-mark\" aria-label=\"Header mark for 'PlatformIO'\"\u003e\u003c/a\u003e\n    PlatformIO\n\u003c/h3\u003e\n\n\u003cp\u003eHowever, I finally saw the light, and one day in pure anger, uninstalled the Ardunio Extension and IDE from my system, and added PlatformIO as an alternative. At that time, I also had a copy of Atom installed, as I had embraced it long before VS Code; and what a change this was.\u003c/p\u003e\n\u003cp\u003eToday however, I am working primary in VS Code for all my work; and adding PlatformIO extensions turns development for these boards into a total dream.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"summary\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Summary\n\u003c/h2\u003e\n\u003cp\u003eSo, after a long story, lets simply this; If you are working on, or considering to get hands dirty on your first IoT project; then allow me to suggest that you can save a ton of time and confusion by simply taking the following path:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIDE: VS Code with PlatformIO Extension\u003c/li\u003e\n\u003cli\u003eSDK: Start with Arduino as its an enormous community\u003c/li\u003e\n\u003cli\u003eBoard: NodeMCU 1.0, Wemos 1D Mini, Lolin v3\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAnd all you need to plan for, is what project your going to build. It’s Christmas time, and I love lights; so join me on next posts, as I dress the house for the holidays!\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Wavemaker",
        "date_published" : "2018-11-27T00:00:00Z",
        "date_modified" : "2018-11-27T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/wavemaker/",
        "url" : "https://damianflynn.github.io/posts/wavemaker/",
        "summary": "Careers are what we all invest our energy and emotions in, either positively or negatively. Positive being the belief that we can make significant progress in this or another organisation and that it will give us the wherewithal to have a happy and productive life. Negative in that we can feel that everyone is out to get us, and the slippery pole has been freshly greased to scupper us.\nThat it’s a “not what you know but who you know” world, and, unfortunately, you don’t know anyone.\n",
        "content_html" : "\u003cp\u003eCareers are what we all invest our energy and emotions in, either positively or negatively. Positive being the belief that we can make significant progress in this or another organisation and that it will give us the wherewithal to have a happy and productive life. Negative in that we can feel that everyone is out to get us, and the slippery pole has been freshly greased to scupper us.\u003c/p\u003e\n\u003cp\u003eThat it’s a “not what you know but who you know” world, and, unfortunately, you don’t know anyone.\u003c/p\u003e\n\u003cp\u003e**ISBN-10 ‏ : ‎ **1463756682\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/wave-Maker_16473390257671727748.jpg\" width=\"565\" height=\"832\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eTimothy Dyer\u003c/p\u003e\n\u003cp\u003eWavemaker The story starts with a young surfer who has a simple dream to get his dad off his back. This simple dream ended up changing the lives of everybody he touched. Being an only child and not having a mother in his life, Glenn Davenport\u0026rsquo;s struggle between his old ways of coping with his overbearing abusive father, Jeff, and a new way he planned to cope with his dad\u0026rsquo;s unpredictable ways. As a teenager who had just started surfing he feels crippled in his mind by a frustrated underachieving drunk of a father who works in a marina on boats. Glenn changes his mode of reactionary defensive lies and deceitful ways, to a truthful loving compassionate one. Fifteen years old he starts this change of belief with the help of a guru, Michael, who miraculously materialized at the moment of a life and death crisis for this young man. This story is based on facts with fiction interwoven throughout it. Experience the surfing gang who he fell in with willingly. They all worked really hard at having as much free fun as they could get their adolescent hands on. Through the use of Glenn\u0026rsquo;s passion for surfing and everything that comes with it, we follow his growth in remembering the divine nature within himself that is spurred on by Michael. Taste the flavor of the beach life that engages all the senses in this story that draws you into Glenn\u0026rsquo;s world. Having faith in getting Jeff involved in Glenn\u0026rsquo;s love of the ocean, Michael planted a seed in Glenn\u0026rsquo;s mind. With the help of his surfing gang they tried their hand at making a wave in the ocean by tricking his dad into captaining this project with his own love of the sea. This incredible journey that this teenager travels on, changes him from a lesser-than spirit into a stand-up self respecting man. As Glenn grew in confidence and self awareness, Michael revealed to him more and more of the mystical powers that are within all of us. Traveling half way around the world to Japan, Europe, and trips from the U.S. to Mexico, Michael\u0026rsquo;s teachings freed Glenn\u0026rsquo;s beliefs from the fears of his past. We read about the struggles he found himself in, on the beaches, the massive waves he rode, and the boats on and in the water. The destitute in Mexico, Mexican officials, Federales, and the mission with Father Juan, as the head of the sanctuary, progressively propel Glenn into a world of selfless service for the local people that have no hope or dreams left in their lives. Going with what he discovered in his heart, his compassion drove him to a life so magical that only a few that have the faith and courage to walk on this path ever achieve. The characters he found himself involved with along the way only heighten his love of humanity which emboldens him to greater and greater accomplishments. This amazing story will challenge you to strive for the same essence that Glenn found after conquering his own fears. Willing himself to walk into the unknown, proving he has what it takes day after day he was included into Michael\u0026rsquo;s world. For his efforts he was allowed to become a part of a selfless order of spirits that relieve the misery in this wonderful world of ours. This order was affectionately nicknamed by some as the Wind Walkers. With this change of mind heaven could not be any sweeter than what he discovered within, then, throughout the world. To find yourself on the doorstep of hell in your own mind one moment, then finding yourself cheering on eternity the next is something to read about. The story starts with Glenn\u0026rsquo;s dream to be free. In the end Glenn finds himself free to be his dream.\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eThat life’s a bitch and then you die!\u003c/p\u003e\n\n\u003c/blockquote\u003e",
        "language": "en"
    },
    {
        "title" : "Defining Policy as Code with ARM Templates",
        "date_published" : "2018-11-20T00:00:00Z",
        "date_modified" : "2018-11-20T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/defining-policy-as-code-with-arm-templates/",
        "url" : "https://damianflynn.github.io/posts/defining-policy-as-code-with-arm-templates/",
        "summary": " My colleagues and friends Tao Yang , and Stanislav Zhelyazkov have both recently posts interesting topics on how to implement your Azure Policy as Code which I strongly recommend you take a few moments to review\nUsing ARM Templates to deploy azure policy definitions that require input parameters Defining input parameters for policy definitions in ARM Templates Improving Readability Both of these topics address the core of the challenges we face when approaching policy as an Infrastructure as Code problem. However, one of the things that is lost in the translation is the readability of the templates which they are deploying.\n",
        "content_html" : "\u003chr\u003e\n\u003cp\u003eMy colleagues and friends \u003ca href=\"https://blog.tyang.org/2018/06/06/using-arm-templates-to-deploying-azure-policy-definitions-that-requires-input-parameters/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eTao Yang\u003c/a\u003e , and \u003ca href=\"https://cloudadministrator.net/2018/07/17/defining-input-parameters-for-policy-definitions-in-arm-template/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eStanislav Zhelyazkov\u003c/a\u003e have both recently posts interesting topics on how to implement your Azure Policy as Code which I strongly recommend you take a few moments to review\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://blog.tyang.org/2018/06/06/using-arm-templates-to-deploying-azure-policy-definitions-that-requires-input-parameters/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eUsing ARM Templates to deploy azure policy definitions that require input parameters\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://cloudadministrator.net/2018/07/17/defining-input-parameters-for-policy-definitions-in-arm-template/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eDefining input parameters for policy definitions in ARM Templates\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"improving-readability\"\u003e\u003ca href=\"#improving-readability\" class=\"header-mark\" aria-label=\"Header mark for 'Improving Readability'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"improving-readability\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Improving Readability\n\u003c/h1\u003e\n\u003cp\u003eBoth of these topics address the core of the challenges we face when approaching policy as an Infrastructure as Code problem. However, one of the things that is lost in the translation is the readability of the templates which they are deploying.\u003c/p\u003e\n\u003cp\u003eNot to reinvent the wheel, I am going to use the same template which Stan presented in his post, and make a small tweak to the process which he has employed to deal with the \u003ccode\u003e'\u003c/code\u003e \u003cem\u003esingle quote\u003c/em\u003e problem!\u003c/p\u003e\n\u003cp\u003eARM follows most of the standard JSON escape sequences, therefore the following examples are quite useful\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"escaping-a-single-quote\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Escaping a Single quote\n\u003c/h2\u003e\n\u003cp\u003eAzure ARM behaves nicely with a simply doubling the single quote characters; just as we apply in Visual Basic.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003e[concat('This is a ''quoted'' word.')]\u003c/code\u003e which then provides the output of \u003ccode\u003eThis is a 'quoted' word.\u003c/code\u003e\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"escaping-a-double-quote\"\u003e\u003ca href=\"#escaping-a-double-quote\" class=\"header-mark\" aria-label=\"Header mark for 'Escaping a Double quote'\"\u003e\u003c/a\u003e\n    Escaping a Double quote\n\u003c/h3\u003e\n\n\u003cp\u003eFor the Double quotes, we use the normal escape character \u003ccode\u003e/\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003e[concat('''single'' and \\\u0026quot;double\\\u0026quot; quotes.')]\u003c/code\u003e will render the output as follows \u003ccode\u003e'single' and \u0026quot;double\u0026quot; quotes.\u003c/code\u003e\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"the-solution\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  The Solution\n\u003c/h2\u003e\n\u003cp\u003eWith this simple trick, we can replace the \u003cem\u003evariables\u003c/em\u003e definition which the guys used with the following snippet:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;variables\u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"nt\"\u003e\u0026#34;filterVNetId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[ concat( \u0026#39;[concat(parameters(\u0026#39;\u0026#39;virtualNetworkId\u0026#39;\u0026#39;),\u0026#39;\u0026#39;*\u0026#39;\u0026#39;)]\u0026#39; ) ]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eI am sure that this is a lot easier to read, and therefor debug; So the full template would look as follows\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;$schema\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;contentVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;1.0.0.0\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;parameters\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;vNetId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ScreenConnect\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;variables\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;filterVNetId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[ concat( \u0026#39;[concat(parameters(\u0026#39;\u0026#39;virtualNetworkId\u0026#39;\u0026#39;),\u0026#39;\u0026#39;*\u0026#39;\u0026#39;)]\u0026#39; ) ]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;resources\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;vm-creation-in-approved-vnet-definition\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Authorization/policyDefinitions\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;apiVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;2018-03-01\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;properties\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;displayName\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Use approved vNet for VM network interfaces\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;policyType\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Custom\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;mode\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;All\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Use approved vNet for VM network interfaces\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;category\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;IaaS\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;parameters\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;virtualNetworkId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Resource Id for the vNet\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"nt\"\u003e\u0026#34;displayName\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;vNet Id\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;policyRule\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;if\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;allOf\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nt\"\u003e\u0026#34;field\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nt\"\u003e\u0026#34;equals\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Network/networkInterfaces\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nt\"\u003e\u0026#34;not\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                  \u003cspan class=\"nt\"\u003e\u0026#34;field\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Network/networkInterfaces/ipconfigurations[*].subnet.id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                  \u003cspan class=\"nt\"\u003e\u0026#34;like\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[variables(\u0026#39;filterVNetId\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;then\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;effect\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;deny\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;vm-creation-in-approved-vnet-assignment\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Authorization/policyAssignments\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;apiVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;2018-03-01\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;dependsOn\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;[resourceId(\u0026#39;Microsoft.Authorization/policyDefinitions/\u0026#39;, \u0026#39;vm-creation-in-approved-vnet-definition\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;properties\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;displayName\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Use approved vNet for VM network interfaces\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Use approved vNet for VM network interfaces\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;assignedBy\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Admin\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;scope\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[subscription().id]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;policyDefinitionId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[resourceId(\u0026#39;Microsoft.Authorization/policyDefinitions\u0026#39;, \u0026#39;vm-creation-in-approved-vnet-definition\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;parameters\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;virtualNetworkId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[parameters(\u0026#39;vNetId\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;outputs\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"summary\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Summary\n\u003c/h2\u003e\n\u003cp\u003eUsing native escape sequences in ARM assist in the overall readability of the final code.\u003c/p\u003e\n\u003cp\u003eThank you Tao and Stan for the inspiration\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "NodeMCU Pinouts",
        "date_published" : "2018-11-18T00:00:00Z",
        "date_modified" : "2018-11-18T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/nodemcu-pinouts/",
        "url" : "https://damianflynn.github.io/posts/nodemcu-pinouts/",
        "summary": "For the past year, I have been using a tiny board, known as the NodeMCU which is essentially a developer board for a module know as the ESP8266. The NodeMCU is formed by an ESP12E, which still has an ESP8266EX inside it.\nThis device is really nice to work with, it is supplied preconfigured with a Micro USB input, for both programming and power.\nThe term NodeMCU usually refers to the firmware, while the board is called Devkit. NodeMCU Devkit 1.0 consists of an ESP-12E on a board, along with a voltage regulator, a USB interface.\n",
        "content_html" : "\u003cp\u003eFor the past year, I have been using a tiny board, known as the \u003cstrong\u003eNodeMCU\u003c/strong\u003e which is essentially a developer board for a module know as the \u003cstrong\u003eESP8266\u003c/strong\u003e. The \u003cstrong\u003eNodeMCU\u003c/strong\u003e is formed by an \u003cstrong\u003eESP12E\u003c/strong\u003e, which still has an \u003cstrong\u003eESP8266EX\u003c/strong\u003e inside it.\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/NodeMCU_ESP12E_7651934963059596054.jpg\" width=\"605\" height=\"466\" alt=\"NodeMCU ESP12 Exploded View\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003cp\u003eThis device is really nice to work with, it is supplied preconfigured with a Micro USB input, for both programming and power.\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eThe term NodeMCU usually refers to the firmware, while the board is called Devkit. NodeMCU Devkit 1.0 consists of an ESP-12E on a board, along with a voltage regulator, a USB interface.\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"esp-12e\"\u003e\u003ca href=\"#esp-12e\" class=\"header-mark\" aria-label=\"Header mark for 'ESP-12E'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"esp-12e\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  ESP-12E\n\u003c/h1\u003e\n\u003cp\u003eThe board created by AI-THINKER, which consists of an \u003cem\u003eEspressif ESP8266EX\u003c/em\u003e inside the metal cover. The microchip has a low-power consumption profile, integrated WiFi and the \u003cem\u003eRISC Tensilica L106 32bit Processor\u003c/em\u003e has a maximum clock of 160 MHz\u003c/p\u003e\n\u003cp\u003eThe following illustrates the pinouts on this board\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/ESP-12E_3857602006968969654.jpg\" width=\"600\" height=\"438\" alt=\"ESP-12E\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003cp\u003eESP-12E_Pinout\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/ESP-12E_Pinout_14927903556754366453.jpg\" width=\"728\" height=\"565\" alt=\"ESP-12E Pinout\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"ide\"\u003e\u003ca href=\"#ide\" class=\"header-mark\" aria-label=\"Header mark for 'IDE'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"ide\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  IDE\n\u003c/h1\u003e\n\u003cp\u003eI have so far being developing on this board using VS Code, and its integrations with the Arduino IDE. While this works well, I am currently considering alternative approach’s; as the debugging experience is far from optimal in my opinion; but that is work for another day.\u003c/p\u003e\n\u003cp\u003eThe power of this board however, is understanding how to connect with outside world, and in this case what are the correct pin identifiers, trough reference of the NodeMCU datasheet and how the board boot’s.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"nodemcu-pinout\"\u003e\u003ca href=\"#nodemcu-pinout\" class=\"header-mark\" aria-label=\"Header mark for 'NodeMCU Pinout'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"nodemcu-pinout\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  NodeMCU Pinout\n\u003c/h1\u003e\n\u003cp\u003eThe Devkit board which we are leveraging maps the pinouts from the ESP-12E module as follows:\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/NodeMCU_ESP12E_Pinout_16490954479957608702.jpg\" width=\"775\" height=\"601\" alt=\"NodeMCU_ESP12E_Pinout\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003cp\u003eTranslating this however to the code we are going to develop in the Arduino sketch’s; we need to reference the pins with thier respective names; which is illustrated in this following image\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/NodeMCU_ESP12E_Arduino_17458296704998701566.jpg\" width=\"695\" height=\"463\" alt=\"NodeMCU_ESP12E_Arduino\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003cp\u003eUse the number that is in front of the GPIO or the constants as follows\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eConstant\u003c/th\u003e\n          \u003cth\u003eI/O\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eDO / LED Builtin\u003c/td\u003e\n          \u003ctd\u003eGPIO16\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eD1\u003c/td\u003e\n          \u003ctd\u003eGPIO5\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eD2\u003c/td\u003e\n          \u003ctd\u003eGPIO4\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eD3\u003c/td\u003e\n          \u003ctd\u003eGPIO0\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eF4\u003c/td\u003e\n          \u003ctd\u003eGPIO2\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eD5\u003c/td\u003e\n          \u003ctd\u003eGPIO14\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eD6\u003c/td\u003e\n          \u003ctd\u003eGPIO12\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eD7\u003c/td\u003e\n          \u003ctd\u003eGPIO13\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eD8\u003c/td\u003e\n          \u003ctd\u003eGPIO15\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eD9\u003c/td\u003e\n          \u003ctd\u003eGPIO3\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eD10\u003c/td\u003e\n          \u003ctd\u003eGPIO1\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eA0\u003c/td\u003e\n          \u003ctd\u003eADC\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"pin-io-functions\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Pin IO Functions\n\u003c/h2\u003e\n\u003cp\u003eWhen performing INPUT and OUTPUT tests on the pins, we obtained the following results:\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eFunction\u003c/th\u003e\n          \u003cth\u003eGPIO\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003edigitalWrite\u003c/td\u003e\n          \u003ctd\u003eWorking: 0, 1, 2, 3, 4, 5, 9, 10, 12, 13, 14, 15\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eNot Working: 6, 7, 8, 11, ADC\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003edigitalRead\u003c/td\u003e\n          \u003ctd\u003eWorking: 0, 2, 4, 5, 9, 10, 12, 13, 14, 15\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eNot Working: 1, 3, 6, 7, 8, 11, ADC\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eanalogWrite\u003c/td\u003e\n          \u003ctd\u003eSoftware PWM: 0, 1, 2, 3, 5, 9, 10, 13\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eHardware PWM: 4, 12, 14, 15\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eNot Working: 6, 7, 8, 11, ADC\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eanalogRead\u003c/td\u003e\n          \u003ctd\u003eWorking: ADC\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"flashing-sketch\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Flashing Sketch\n\u003c/h2\u003e\n\u003cp\u003eThe following simple sketch should flash an LED connected directly to the NodeMCU\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ec\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e//Connect a testing LED to GPIO14 which is pin D5\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e\u003c/span\u003e\u003cspan class=\"cp\"\u003e#define LED D5\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"nf\"\u003esetup\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003epinMode\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eLED\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eOUTPUT\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"nf\"\u003eloop\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003edigitalWrite\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eLED\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eHIGH\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e    \u003cspan class=\"c1\"\u003e// Turn on the LED\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e\u003c/span\u003e  \u003cspan class=\"nf\"\u003edelay\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e1000\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e                \u003cspan class=\"c1\"\u003e// Wait 1 Second\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e\u003c/span\u003e  \u003cspan class=\"nf\"\u003edigitalWrite\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eLED\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eLOW\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e     \u003cspan class=\"c1\"\u003e// Turn off the LED\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e\u003c/span\u003e  \u003cspan class=\"nf\"\u003edelay\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e1000\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e                \u003cspan class=\"c1\"\u003e// Wait 1 Second\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eUsing a very simple hook up example.\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/LED_Connection_4822302554713213868.jpg\" width=\"717\" height=\"700\" alt=\"LED Connection\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003cp\u003eAlternatively, without any external LED, we can set the LED to use the onboard LED with the mapping to \u003ccode\u003eD0\u003c/code\u003e or the constant \u003ccode\u003eLED_BUILTIN\u003c/code\u003e\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eImportant:\u003cbr\u003e\nPlease note that there are lots of generic ESP8266 boards and there is the possibility that some of them are sold under the name of NodeMCU and have different pin mappings. Besides that, there are different NodeMCU versions.\u003c/p\u003e\n\n\u003c/blockquote\u003e",
        "language": "en"
    },
    {
        "title" : "Implementing Comments on a Static Site",
        "date_published" : "2018-10-30T00:00:00Z",
        "date_modified" : "2018-10-30T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/implementing-comments-on-a-static-site/",
        "url" : "https://damianflynn.github.io/posts/implementing-comments-on-a-static-site/",
        "summary": "At this point we are almost ready to go live with our site, however, one of the cornerstones to growing and sharing is communication.\nWordpress In the world of Wordpress, this was a standard core feature, which leveraged the fact that the pages were rendered on demand from a backend database. In this scenario, the same approach is offered to maintain a commenting platform.\n",
        "content_html" : "\u003cp\u003eAt this point we are almost ready to go live with our site, however, one of the cornerstones to growing and sharing is communication.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"wordpress\"\u003e\u003ca href=\"#wordpress\" class=\"header-mark\" aria-label=\"Header mark for 'Wordpress'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"wordpress\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Wordpress\n\u003c/h1\u003e\n\u003cp\u003eIn the world of Wordpress, this was a standard core feature, which leveraged the fact that the pages were rendered on demand from a backend database. In this scenario, the same approach is offered to maintain a commenting platform.\u003c/p\u003e\n\u003cp\u003eHowever, as I noted earlier; given that Wordpress powers a very large portion of the blogging surface of the internet; it is an obvious target for hacking, just refer to the CVS database for a glimpse of what this looks like in reality.\u003c/p\u003e\n\u003cp\u003eI have had more than over of these exceptions result in defacement or excessive spam in the comment system. The real objective, however, is to bloat the database which will then result in the site going offline as the database reaches its maximum limit based on your host or plan.\u003c/p\u003e\n\u003cp\u003eRecovering from this mess is slow and painful, and you must also not ignore the fact that you now should also update the runtime; a process we try to ignore as this exercise generally results in breaking extensions and taking the site offline for a little time.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"static-sites\"\u003e\u003ca href=\"#static-sites\" class=\"header-mark\" aria-label=\"Header mark for 'Static Sites'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"static-sites\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Static Sites\n\u003c/h1\u003e\n\u003cp\u003eSo, if we do not have the luxury of a database to host our comments in the static site configuration (recall all we have is HTML and client-side JavaScript); how on earth do we implement this critical feature.\u003c/p\u003e\n\u003cp\u003eOf course, we can use the cloud! There are many SaaS offerings which are designed to integrate into our site but offload all the storage and processing to the service\u003c/p\u003e\n\u003cp\u003eAdditionally, many of these are free to use, if you agree to let the service display a couple of advertisements. Previous I have used services from Disqus on my site to offload the challenges of hosting and keeping updated my own.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"disqus-out\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Disqus Out!\n\u003c/h2\u003e\n\u003cp\u003eAs I coded the liquid for this side I also implemented Disqus as the commentary service. However, immediately after turning this on for my posts the page load time was almost 3 times slower!\u003c/p\u003e\n\u003cp\u003eAdding insult to injury the adverts have evolved to be click bate and not relevant to my content what so ever.\u003c/p\u003e\n\u003cp\u003eDisqus does offer a \u003cem\u003eNot Free\u003c/em\u003e option which addressed the Advertising a bit better, but that does not explain why the massive performance hit?\u003c/p\u003e\n\u003cp\u003eTracing my site loading time with Chromes F12 development tools expose the shocking truth.\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eAdding Disqus to the site results in over 50 treads to tracking and other undesirable sites\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cp\u003eTherefore I immediately deleted the liquid code and stopped any further integration of this service. It’s gone and good ridden\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"utterancees\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Utterance.es\n\u003c/h2\u003e\n\u003cp\u003eWatching how Microsoft recently replaced their commentary service on the \u003cem\u003edocs.microsoft.com\u003c/em\u003e sites to leverage GitHub, I decided that this might be a really good solution for this site also.\u003c/p\u003e\n\u003cp\u003eAfter a little research, I found a lovely match called \u003cstrong\u003eutteranc.es\u003c/strong\u003e which requires that you log in with your Github account, and will create a new issue per post in my site, that can be tracked and managed as normal issues within github which is pretty awesome.\u003c/p\u003e\n\u003cp\u003e(I assume based on my content and audience that this should not be a problem - let me know on Twitter if I am wrong about this)\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"implementing-utterances\"\u003e\u003ca href=\"#implementing-utterances\" class=\"header-mark\" aria-label=\"Header mark for 'Implementing Utteranc.es'\"\u003e\u003c/a\u003e\n    Implementing Utteranc.es\n\u003c/h3\u003e\n\n\u003cp\u003eAdding this feature is trivial, Really trivial!\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWe require a public Github Repo\u003c/li\u003e\n\u003cli\u003eAuthorise the [Utteranc.es Bot][https://github.com/apps/utterances] access to the selected Repo\u003c/li\u003e\n\u003cli\u003eAdd the following javascript code to our page, updating the paramater \u003ccode\u003erepo=\u0026quot;[ENTER REPO HERE]\u0026quot;\u003c/code\u003e to match the Repo name; for example \u003ccode\u003erepo=\u0026quot;[damianflynn/damianflynn.github.io\u0026quot;\u003c/code\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejavascript\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003escript\u003c/span\u003e \u003cspan class=\"nx\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://utteranc.es/client.js\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nx\"\u003erepo\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;[ENTER REPO HERE]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nx\"\u003eissue\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"nx\"\u003eterm\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;pathname\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nx\"\u003etheme\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;github-light\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nx\"\u003ecrossorigin\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;anonymous\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"kr\"\u003easync\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"err\"\u003e/script\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eI have added a little extra logic to determine which pages to offer comments; for example; I do not need this feature on the main landing page.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"summary\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Summary\n\u003c/h2\u003e\n\u003cp\u003eNow, I really want you to tell me what your thoughts about this for a solution?\u003c/p\u003e\n\u003cp\u003eGo On, Leave a comment, even if its just a thumbs up or down!\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Using pipelines for flow static site content between markdown and foundation",
        "date_published" : "2018-10-24T00:00:00Z",
        "date_modified" : "2018-10-24T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/using-pipelines-for-flow-static-site-content-between-markdown-and-foundation/",
        "url" : "https://damianflynn.github.io/posts/using-pipelines-for-flow-static-site-content-between-markdown-and-foundation/",
        "summary": " With the heavy lifting done in creating the site building mechanics and a solid foundation to build and share upon; our final objective is to automate the process of connecting these two stages.\nRelease Pipeline Technically the goal we are speaking about is the Release Pipeline which will take the artefact (our site .ZIP file) that we created in the Build Pipeline in our previous topic Constructing a new Home with Jekyll and Azure DevOps; and publish this to our storage account.\n",
        "content_html" : "\u003chr\u003e\n\u003cp\u003eWith the heavy lifting done in creating the site building mechanics and a solid foundation to build and share upon; our final objective is to automate the process of connecting these two stages.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"release-pipeline\"\u003e\u003ca href=\"#release-pipeline\" class=\"header-mark\" aria-label=\"Header mark for 'Release Pipeline'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"release-pipeline\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Release Pipeline\n\u003c/h1\u003e\n\u003cp\u003eTechnically the goal we are speaking about is the \u003cstrong\u003eRelease Pipeline\u003c/strong\u003e which will take the artefact \u003cem\u003e(our site .ZIP file)\u003c/em\u003e that we created in the \u003cstrong\u003eBuild Pipeline\u003c/strong\u003e in our previous topic \u003ca href=\"/Building-The-Site/\" rel=\"\"\u003eConstructing a new Home with Jekyll and Azure DevOps\u003c/a\u003e; and publish this to our storage account.\u003c/p\u003e\n\u003cp\u003eIn simple terms, we are going to Unzip the archive to the storage, which is configured to expose the content as a website, and to increase performance we are leveraging a content delivery network.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"copying-content\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Copying Content\n\u003c/h2\u003e\n\u003cp\u003eAs with our \u003cem\u003eBuild Pipeline\u003c/em\u003e there are a few different options on how to accomplish the work.\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eCurrently Azure DevOps is not exposing the release pipelines in an Infrastructure as Code configuration so we will complete this in the portal.\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cp\u003eWe begin with a new \u003cem\u003eRelease Pipeline\u003c/em\u003e, add add the task \u003cstrong\u003eAzure File Copy\u003c/strong\u003e, and set the settings similar to the following:\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eSetting\u003c/th\u003e\n          \u003cth\u003eValue\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eDisplay Name\u003c/td\u003e\n          \u003ctd\u003eAzure Blob File Copy\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eSource\u003c/td\u003e\n          \u003ctd\u003e$(System.DefaultWorkingDirectory)/_Jekyll Builder/_site\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAzure Connection Type\u003c/td\u003e\n          \u003ctd\u003eAzure Resource Manager\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAzure Subscription\u003c/td\u003e\n          \u003ctd\u003eMy Azure Subscription\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eDestination Type\u003c/td\u003e\n          \u003ctd\u003eAzure Blob\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eStorage Account\u003c/td\u003e\n          \u003ctd\u003eName of the Storage Account you created, e.g. My Blog\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eContainer Name\u003c/td\u003e\n          \u003ctd\u003e$web\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eDone!, Seriously; pretty easy right!\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"replace-content\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Replace Content\n\u003c/h2\u003e\n\u003cp\u003eOne small issue with the previous approach is that it merely overwrites the content in the blob with the latest version, but it failed to remove any content which might have been removed from the site.\u003c/p\u003e\n\u003cp\u003eCurrently, there is no equivalent to the magic \u003cem\u003eXCOPY\u003c/em\u003e command that will sync the blob removing the data that is no longer required; that’s a project for another day.\u003c/p\u003e\n\u003cp\u003eThe quick and dirty fix for this scenario is first to delete the existing content and then deploy the latest version. This would typically result in a potential outage as the content vanishes for a little time; however, we do not have that concern, because we have decided to use a Content Delivery Network which caches our site.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"task-1\"\u003e\u003ca href=\"#task-1\" class=\"header-mark\" aria-label=\"Header mark for 'Task 1'\"\u003e\u003c/a\u003e\n    Task 1\n\u003c/h3\u003e\n\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eSetting\u003c/th\u003e\n          \u003cth\u003eValue\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eDisplay Name\u003c/td\u003e\n          \u003ctd\u003eDelete Old Files\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAzure Subscription\u003c/td\u003e\n          \u003ctd\u003eMy Azure Subscription\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eScript Location\u003c/td\u003e\n          \u003ctd\u003eInline\u003ccode\u003eaz storage blob delete-batch --source $web --account-name $(storageAccount) --output table\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"task-2\"\u003e\u003ca href=\"#task-2\" class=\"header-mark\" aria-label=\"Header mark for 'Task 2'\"\u003e\u003c/a\u003e\n    Task 2\n\u003c/h3\u003e\n\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eSetting\u003c/th\u003e\n          \u003cth\u003eValue\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eDisplay Name\u003c/td\u003e\n          \u003ctd\u003eUpload Fresh Content\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAzure Subscription\u003c/td\u003e\n          \u003ctd\u003eMy Azure Subscription\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eScript Location\u003c/td\u003e\n          \u003ctd\u003eInline\u003ccode\u003eaz storage blob upload-batch --source _site --destination $web --account-name $(storageAccount) --output table --no-progress\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"tiggers-ready\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Tiggers Ready\n\u003c/h2\u003e\n\u003cp\u003eThe last point to consider is \u003cem\u003eWhen\u003c/em\u003e should this deployment happen, and that’s also pretty obvious when we think about it.\u003c/p\u003e\n\u003cp\u003eEvery time we have a good build of the site, we should check to see which branch just completed the process, and update the relevant site based on this information.\u003c/p\u003e\n\u003cp\u003e\n\n  \n    \u003cimg src=\"/Release-Pipeline-Flow-01_5972899026626581065.png\" width=\"633\" height=\"493\" alt=\"Azure DevOps Release Flow Example\"style=\"width: auto;height: auto;\"\u003e\n  \n\n\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"summary\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Summary\n\u003c/h2\u003e\n\u003cp\u003eWhich flow you choose to implement are entirely at your discretion; As I am currently doing much work on the taxonomy of the site; I have implemented the second option of delete and redeploy; but I do in the plan to come back and optimize this by adding a sync process which will be far more efficient.\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Laying the foundation in Azure for a Static Site",
        "date_published" : "2018-10-20T00:00:00Z",
        "date_modified" : "2018-10-20T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/laying-the-foundation-in-azure-for-a-static-site/",
        "url" : "https://damianflynn.github.io/posts/laying-the-foundation-in-azure-for-a-static-site/",
        "summary": " Hosting my site on Wordpress was not super complex; I leveraged the Azure PaaS Services for Web Apps, and orginally the 3rd party support for hosted MySQL database’s. Once I was up and running I quickly realised that all media hosted on the site were landing on the webserver, so a plugin from its marketplace offered the ability to relocate the media to an Azure Blob; offloading some of the challanges.\n",
        "content_html" : "\u003chr\u003e\n\u003cp\u003eHosting my site on Wordpress was not super complex; I leveraged the Azure PaaS Services for Web Apps, and orginally the 3rd party support for hosted MySQL database’s. Once I was up and running I quickly realised that all media hosted on the site were landing on the webserver, so a plugin from its marketplace offered the ability to relocate the media to an Azure Blob; offloading some of the challanges.\u003c/p\u003e\n\u003cp\u003eHosting this was not free, while I could have leveraged the Free Webserver option it did not take a lot of load for this to be causing some unacceptable performance issues; which when combined with a hosted MySQL service which also was not going to be super fast and was limited in the database size; which became event more of a problem when an attack on the site would result in 1000’s of useless comments filling the database to capacity and taking the site down as a direct result.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"static-site-hosting\"\u003e\u003ca href=\"#static-site-hosting\" class=\"header-mark\" aria-label=\"Header mark for 'Static Site Hosting'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"static-site-hosting\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Static Site Hosting\n\u003c/h1\u003e\n\u003cp\u003eNot a lot has to change as we move to the static side model; The web server is still needed to host the side; but the database component is no longer a concern with this approach.\u003c/p\u003e\n\u003cp\u003eHowever, The cloud is a beautiful thing, and there are so many more ways to reach you goal, and while we are focused, we can complete a lot more for a lot less!\u003c/p\u003e\n\u003cp\u003eFor this site I have chosen to run a lean cost model, while providing a super responsive experience to you, my readers and subscribers.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"blob-storage-foundations\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Blob Storage Foundations\n\u003c/h2\u003e\n\u003cp\u003eUsing the standard \u003cstrong\u003eAzure Blob Storage\u003c/strong\u003e offering, I simply copy over the generated HTML site to the account. Assuming the blob is exposed to the public its content is available as a HTTPS endpoint; which simply put is a website.\u003c/p\u003e\n\u003cp\u003eBut, alone this is not enough; why? because how would I address requested for pages which do not exist for example; I would not want an ugly HTTP 404 error page to be rendered, but instead a nice response to offer a search, navigation, or other more professional experience.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;$schema\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;contentVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;1.0.0.0\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;parameters\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;vNetId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ScreenConnect\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;variables\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;filterVNetId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[ concat( \u0026#39;[concat(parameters(\u0026#39;\u0026#39;virtualNetworkId\u0026#39;\u0026#39;),\u0026#39;\u0026#39;*\u0026#39;\u0026#39;)]\u0026#39; ) ]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;resources\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;vm-creation-in-approved-vnet-definition\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Authorization/policyDefinitions\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;apiVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;2018-03-01\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;properties\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;displayName\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Use approved vNet for VM network interfaces\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;policyType\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Custom\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;mode\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;All\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Use approved vNet for VM network interfaces\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;category\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;IaaS\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;parameters\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;virtualNetworkId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Resource Id for the vNet\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"nt\"\u003e\u0026#34;displayName\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;vNet Id\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;policyRule\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;if\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;allOf\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nt\"\u003e\u0026#34;field\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nt\"\u003e\u0026#34;equals\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Network/networkInterfaces\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nt\"\u003e\u0026#34;not\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                  \u003cspan class=\"nt\"\u003e\u0026#34;field\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Network/networkInterfaces/ipconfigurations[*].subnet.id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                  \u003cspan class=\"nt\"\u003e\u0026#34;like\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[variables(\u0026#39;filterVNetId\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;then\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;effect\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;deny\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;vm-creation-in-approved-vnet-assignment\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Authorization/policyAssignments\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;apiVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;2018-03-01\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;dependsOn\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;[resourceId(\u0026#39;Microsoft.Authorization/policyDefinitions/\u0026#39;, \u0026#39;vm-creation-in-approved-vnet-definition\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;properties\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;displayName\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Use approved vNet for VM network interfaces\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Use approved vNet for VM network interfaces\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;assignedBy\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Admin\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;scope\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[subscription().id]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;policyDefinitionId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[resourceId(\u0026#39;Microsoft.Authorization/policyDefinitions\u0026#39;, \u0026#39;vm-creation-in-approved-vnet-definition\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;parameters\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;virtualNetworkId\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[parameters(\u0026#39;vNetId\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;outputs\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eTo achieve this I need some HTTP routing options\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"house-warming-inviting-guests\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  House Warming, Inviting Guests\n\u003c/h2\u003e\n\u003cp\u003eIt is not hard to find a list of potential solutions in Azure to fill this role; We could use a WebApp, API Managment, or event Azure Functions, or the Azure Functions proxy features. However, we do not actually need to be very creative; as Microsoft have listened to uservoice, MVPs and customers all calling for some better web publishing support for blob storage, especially given AWS have features in thier S3 offer that work simply and effectively.\u003c/p\u003e\n\u003cp\u003eTo this end we will take a look at a feature which at the time of writing is still in preview called \u003cstrong\u003eStatic Website\u003c/strong\u003e (You would have never guessed right!)\u003c/p\u003e\n\u003cp\u003eAll we need do, is set this feature as \u003cem\u003eEnabled\u003c/em\u003e and define where visitors should be routed to for the \u003cem\u003eIndex Document\u003c/em\u003e and the \u003cem\u003eError Document\u003c/em\u003e, and apply the changes. This simple feature makes our site behave just as we would like; and it is \u003cem\u003efree!\u003c/em\u003e.\u003c/p\u003e\n\u003cblockquote class=\"blockquote\" style=\"text-align: right;\"\u003e\n    \u003cp\u003eNote: Due to Preview Status, we currently have no ARM Template settings for enabling and configuring this setting. Therefore for Infrasructure as Code we will fall back to Azure CLI\u003c/p\u003e\n\n\u003c/blockquote\u003e\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eshell\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaz extension add --name storage-preview\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaz storage blob service-properties update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  --account-name \u0026lt;ACCOUNT_NAME\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  --static-website\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  --404-document \u0026lt;ERROR_DOCUMENT_NAME\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  --index-document \u0026lt;INDEX_DOCUMENT_NAME\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eaz storage account show\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  -n \u0026lt;ACCOUNT_NAME\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  -g \u0026lt;RESOURCE_GROUP\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  --query \u003cspan class=\"s2\"\u003e\u0026#34;primaryEndpoints.web\u0026#34;\u003c/span\u003e --output tsv\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"foundation-for-global-scale\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Foundation for Global Scale\n\u003c/h2\u003e\n\u003cp\u003eBut why stop here, we can go a little further; I want this site to be responsive for you, regardless of where you are located on the planet; afer all we are all embracing the cloud and need to learn and share; so how better to acomplish this, simply leverage another feature from the Azure arsnal of services.\u003c/p\u003e\n\u003cp\u003eCalling out the \u003cem\u003eAzure Content Delivery Network\u003c/em\u003e (Azure CDN) we can take advantage, or any one of three platforms\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVerizon’s Global Network\u003c/li\u003e\n\u003cli\u003eAkamai CDN Platform\u003c/li\u003e\n\u003cli\u003eMicrosofts Azure’s Footprint\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe choice you make here really will come down to what you want in the list of features and the budget you have in mind; but for the purpose of this blog; I have for now chosen to run with the option of \u003cstrong\u003ePremium Verizon\u003c/strong\u003e!\u003c/p\u003e\n\u003cp\u003eWhy? Well It is the most feature rich of the offerings currently, and also the most expensive; which still should not cost me more then 3 or 4 euro a month; which is a lot less than I was paying for my Wordpress site. Give me a month or two and I will share thee exact costs of this solution so you can appreciate the value offered by Azure PaaS offerings.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003ejson\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;$schema\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;contentVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;#{GITVERSION_FullSemVer}#\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;parameters\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;String\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;location\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[resourceGroup().location]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;contactEmail\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;info@damianflynn.com\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;projectName\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Static Site Hosting\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;environment\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;allowedValues\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Production\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Test\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Developer\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Proof of concept\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;defaultValue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Developer\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Type of environment\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;variables\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;storageName\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[tolower(take(concat(\u0026#39;blob\u0026#39;, parameters(\u0026#39;name\u0026#39;), uniqueString(resourceGroup().id)), 23))]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;resources\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;comments\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Storage Account for Static Site Content\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[variables(\u0026#39;storageName\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;apiVersion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;2018-07-01\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Storage/storageAccounts\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;sku\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Standard_LRS\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;tier\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Standard\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;kind\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;StorageV2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;location\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[parameters(\u0026#39;location\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;tags\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;Contact\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[parameters(\u0026#39;contactEmail\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;Project\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[parameters(\u0026#39;projectName\u0026#39;)]\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;Environment\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;[parameters(\u0026#39;environment\u0026#39;)]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;scale\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;properties\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;networkAcls\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;bypass\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;AzureServices\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;virtualNetworkRules\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;ipRules\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[],\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;defaultAction\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Allow\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;supportsHttpsTrafficOnly\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;encryption\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;services\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;file\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"nt\"\u003e\u0026#34;enabled\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;blob\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"nt\"\u003e\u0026#34;enabled\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nt\"\u003e\u0026#34;keySource\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Microsoft.Storage\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;accessTier\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Hot\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e},\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nt\"\u003e\u0026#34;dependsOn\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThe template will setup out CDN environment, all we need to provide is a name for the CDN service, and the URI to the Static Site which we established in the previous stage, for example this may appear as \u003ccode\u003eblobwebaddress.z00.web.core.windows.net\u003c/code\u003e\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"adding-content\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Adding Content\n\u003c/h2\u003e\n\u003cp\u003eWith very little effort, and cost, we now have established a foundation which can serve content efficiently globally, Our next challenge will be to deploy our site to this foundation in a easy manner\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Constructing a new Home with Jekyll and Azure DevOps",
        "date_published" : "2018-10-10T00:00:00Z",
        "date_modified" : "2018-10-10T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/constructing-a-new-home-with-jekyll-and-azure-devops/",
        "url" : "https://damianflynn.github.io/posts/constructing-a-new-home-with-jekyll-and-azure-devops/",
        "summary": " One of the unspoken truths behind the lack of posts in recent history was due to a few bugs, which in the end resulted in an experience where from home it appeared that any new content was published and working; but outside this fortress in the real world, there was a large silence echoing.\nI really only discovered this issue in May of this year, and was, to say the least, a little agitated with the situation and decided then to change the approach to how I save my notes and share my thoughts.\n",
        "content_html" : "\u003chr\u003e\n\u003cp\u003eOne of the unspoken truths behind the lack of posts in recent history was due to a few bugs, which in the end resulted in an experience where from home it appeared that any new content was published and working; but outside this fortress in the real world, there was a large silence echoing.\u003c/p\u003e\n\u003cp\u003eI really only discovered this issue in May of this year, and was, to say the least, a little agitated with the situation and decided then to change the approach to how I save my notes and share my thoughts.\u003c/p\u003e\n\u003ch1 class=\"relative text-5xl font-semibold leading-tense text-secondary-500 mb-4 -ml-px\" id=\"jekyll\"\u003e\u003ca href=\"#jekyll\" class=\"header-mark\" aria-label=\"Header mark for 'Jekyll'\"\u003e\u003c/a\u003e\n  \u003cdiv id=\"jekyll\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Jekyll\n\u003c/h1\u003e\n\u003cp\u003eAfter a lot of hours hacking at CSS and JS, neither of which are my strongest points; combined with a whole lot of \u003cem\u003eliquid\u003c/em\u003e scripting, which is based on the Python Jinja library; I chose to leverage the open source Jekyll project.\u003c/p\u003e\n\u003cp\u003eThis is not to say, that I might not reconsider this again as I am pretty intrigued also with Hugo; but one point is for sure… My days struggling with \u003cem\u003eWordpress\u003c/em\u003e are history.\u003c/p\u003e\n\u003cp\u003eDon’t get me wrong, Wordpress is great, even fantastic, but when it breaks, or its hacked (and boy have I been hacked), or when the comments system becomes a spam target; then its a total nightmare to have to deal with.\u003c/p\u003e\n\u003cp\u003eI want something that is easy to use, a lot less prone to hacking, and painless to host; so my choice was clear from the start - I was going to use a Static Site Generator\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"building\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Building\n\u003c/h2\u003e\n\u003cp\u003eLeveraging GIT for my version control, I have a simple pipeline which rebuilds a new version of the site each time a new commit is made to the repository. I do like to tweak and have actually no less than two approaches to the effort\u003c/p\u003e\n\u003cpre class=\"mermaid\"\u003egraph LR\n  A[Blog Repository]\n  B[Build Pipeline]\n  C[Docker Based Build]\n  D[Native Build]\n  E[Publish Built Site]\n  A --\u003e|Git Push Trigger| B\n  B --\u003e C\n  B --\u003e D\n  C --\u003e E\n  D --\u003e E\n\u003c/pre\u003e\u003cp\u003eAs I spend the majority of my time focused on Microsoft Technology stack, I am leveraging Azure DevOps to run my build process; however, if you prefer other tools, for example, Jenkins, CircleCI, etc then the concepts should be easily transportable, as there is nothing truly complex happening at this point.\u003c/p\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"docker-build-pipeline\"\u003e\u003ca href=\"#docker-build-pipeline\" class=\"header-mark\" aria-label=\"Header mark for 'Docker Build Pipeline'\"\u003e\u003c/a\u003e\n    Docker Build Pipeline\n\u003c/h3\u003e\n\n\u003cp\u003eThis version of the pipeline is my favourite, as I can use the same commands on my workstation to run a local web server to watch in realtime what my edits are going to look like when I finally commit, with 100% confidence that there will be no drift, as I use the exact same container for both roles, development and deployment\u003c/p\u003e\n\u003cp\u003eThe pipeline I am sharing is in YAML format, which we are going to see a whole lot most of over time, and by sharing this you can easily recreate your own build pipeline with nothing more than a good paste!\u003c/p\u003e\n\u003cp\u003eThe build is running on a hosted Ubuntu 1604 instance, but this could be easily replaced with a dedicated build node; however for the amount of time I will use for the building, I should fall well inside the free monthly allocation offered in Azure DevOps; so, for now, this is perfect.\u003c/p\u003e\n\u003cp\u003eThe pipeline has only 3 steps\u003c/p\u003e\n\u003cpre class=\"mermaid\"\u003egraph TD\n  A[Retrieve the relevant commit from Git Repo]\n  B[Run Docker Image to Build Site]\n  C[Move Generated HTML Site to Staging Area]\n  D[Publish Built Site]\n  A --\u003e B\n  B --\u003e C\n  C --\u003e D\n\u003c/pre\u003e\u003cp\u003eThe \u003cem\u003eYAML\u003c/em\u003e representation of the flow is as follows; you can also choose to add the steps in the UX and provide the data below into the relevant fields, as there is a 1:1 relationship between the UX and the YAML Infrastructure as Code\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eyaml\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eresources\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003erepo\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eself\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003equeue\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eHosted Ubuntu 1604\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003esteps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003etask\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eDocker@1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edisplayName\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Run an image\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003einputs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003econtainerregistrytype\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Container Registry\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ecommand\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Run an image\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eimageName\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;jekyll/builder:latest\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003equalifyImageName\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003evolumes\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e|\u003c/span\u003e\u003cspan class=\"sd\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e     $(Build.SourcesDirectory):/srv/jekyll\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e     $(Build.BinariesDirectory):/srv/jekyll/_site\u003c/span\u003e\u003cspan class=\"w\"\u003e     \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eworkingDirectory\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;$(Build.SourcesDirectory):/srv/jekyll\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003econtainerCommand\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;jekyll build --future\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003erunInBackground\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003etask\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eCopyFiles@2\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edisplayName: \u0026#39;Copy Files to\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e$(Build.ArtifactStagingDirectory)\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003einputs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eSourceFolder\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;$(Build.BinariesDirectory)\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eTargetFolder\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;$(Build.ArtifactStagingDirectory)\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003etask\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ePublishBuildArtifacts@1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edisplayName: \u0026#39;Publish Artifact\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e_site\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003einputs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eArtifactName\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;_site\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 class=\"text-xl font-bold text-primary-500 leading-tight mb-2\" id=\"native-build-pipeline\"\u003e\u003ca href=\"#native-build-pipeline\" class=\"header-mark\" aria-label=\"Header mark for 'Native Build Pipeline'\"\u003e\u003c/a\u003e\n    Native Build Pipeline\n\u003c/h3\u003e\n\n\u003cp\u003eThe Native approach does not offer a whole lot of immediate advantages over the docker version of the pipeline; I honestly created this to prove to myself that I could.\u003c/p\u003e\n\u003cp\u003eHowever, after creating this, I do see an advantage. If I should choose to create a dedicated Build Server; I would be able to have the \u003cem\u003eRuby bundler\u003c/em\u003e and all the \u003cem\u003eJekyll gems\u003c/em\u003e pre-staged on the node; which would remove almost 3 minutes from the build pipeline, as these steps would not need to be repeated every time I executed a new build.\u003c/p\u003e\n\u003cp\u003eNow, I would have expected the Docker approach to have this as an advantage with the Gems pre-installed in the container, but that’s not the case with the official container I have used in the other pipeline; As a result, both pipelines take 3.5 minutes to prepare, build and publish my site artefacts currently. Clearly, I have a lot of room to make this better.\u003c/p\u003e\n\u003cp\u003eThis pipeline is a little more verbose with 5 steps currently\u003c/p\u003e\n\u003cpre class=\"mermaid\"\u003egraph TD\n  A[Retrieve the relevant commit from Git Repo]\n  B[Run Docker Image to Build Site]\n  C[Move Generated HTML Site to Staging Area]\n  D[Publish Built Site]\n  A --\u003e B\n  B --\u003e C\n  C --\u003e D\n\u003c/pre\u003e\u003cp\u003eThe \u003cem\u003eYAML\u003c/em\u003e representation of the flow is very similar to the previous sample, this time however you are going to really just been looking at some shell commands, which run essentially on any platform we can host ruby on.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    code-block-title \n    \n    tw-flex \n    tw-flex-row \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n\n    \u003cdiv class=\"code-block-title-bar tw-w-full\"\u003e\n      \u003cp class=\"tw-select-none !tw-my-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003eyaml\u003c/p\u003e\n    \u003c/div\u003e\n\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eresources\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003erepo\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eself\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003equeue\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eHosted Ubuntu 1604\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003esteps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003etask\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eUseRubyVersion@0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edisplayName\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Use Ruby \u0026gt;= 2.4\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;gem install bundler\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edisplayName\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Install bundler\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;bundle install\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edisplayName\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Install Jekyll and Dependencies\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;bundle exec jekyll build -d $(Build.ArtifactStagingDirectory)\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edisplayName\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;Build Jekyll Static Site\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e- \u003cspan class=\"nt\"\u003etask\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ePublishBuildArtifacts@1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edisplayName: \u0026#39;Publish Artifact\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e_site\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003einputs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eArtifactName\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;_site\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"next-steps\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Next Steps\n\u003c/h2\u003e\n\u003cp\u003eWith a built site, published; what we really have is a \u003cem\u003e.ZIP\u003c/em\u003e file which contains all the generated HTML which we can drop onto our web server to publish to the world.\u003c/p\u003e\n\u003cp\u003eThere are many choices on the web hosting platform to use, keep tuned, and I will share with you the solution I have elected to use for this site\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Hitting Reset",
        "date_published" : "2018-10-05T00:00:00Z",
        "date_modified" : "2018-10-05T00:00:00Z",
        "id" : "https://damianflynn.github.io/posts/hitting-reset/",
        "url" : "https://damianflynn.github.io/posts/hitting-reset/",
        "summary": "10 Years, It is hard to believe that I have been posting thoughts here that long. And how so much has changed since I begun?\nI started this journey with the encouragement of some amazing people in Microsoft, as an opportunity to spread the news about Hyper-V and even more relevant at the time System Center Virtual Machine Manager which was still known by its code name!.\nMy daily experience with this application, Windows Server, and real-world enterprise issues; positioned me at one of the leading edges of Microsoft Technologies; and fully armed with a true business driver pushing forward. Wounds and pains exposed, I gained a lot of insight to the digital plumbing of these technologies and as a result of a lot of fantastic information to share - sometimes not good news; but never the less - reality.\n",
        "content_html" : "\u003cp\u003e10 Years, It is hard to believe that I have been posting thoughts here that long. And how so much has changed since I begun?\u003c/p\u003e\n\u003cp\u003eI started this journey with the encouragement of some amazing people in Microsoft, as an opportunity to spread the news about \u003cem\u003eHyper-V\u003c/em\u003e and even more relevant at the time \u003cem\u003eSystem Center Virtual Machine Manager\u003c/em\u003e which was still known by its code name!.\u003c/p\u003e\n\u003cp\u003eMy daily experience with this application, Windows Server, and real-world enterprise issues; positioned me at one of the leading edges of Microsoft Technologies; and fully armed with a true business driver pushing forward. Wounds and pains exposed, I gained a lot of insight to the digital plumbing of these technologies and as a result of a lot of fantastic information to share - sometimes not good news; but never the less - reality.\u003c/p\u003e\n\u003cp\u003eI have primarily worked in the mindset that when I find an issue to be addressed, before sharing, escalating or attacking - I need to stop and consider solutions; which normally result in a more constructive and progressive approach to unblocking my path. That ethos spans back to my days working as what would be considered today in 2018 as an \u003cem\u003eIoT\u003c/em\u003e architect; but 20 years ago in a Rubber Molding plant, The Operations Manager always reminded me as I entered his office, “If you don’t have some suggestion for a solution before entering and presenting a problem, leave now, and come back when I am prepared (But don’t spend all day - Problems cost money!).”\u003c/p\u003e\n\u003cp\u003eIn Hindsight, this approach challenged my limits every day; but I now also realise that he actually had no technical knowledge, and without my suggestions, we were heading the route of the Titanic!\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"system-center\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  System Center\n\u003c/h2\u003e\n\u003cp\u003eWhile the solution itself continues to live on, as clear from the very recent launch of \u003cem\u003eSystem Center 2019\u003c/em\u003e at the Ignite Conference in Florida; My own passion and engagement with this technology has ultimately diminished to a point of history., despite co-authoring and technically reviewing a number of books, speaking at so many events, and investing 1000’s of hours.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"personal-redevelopment\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Personal Redevelopment\n\u003c/h2\u003e\n\u003cp\u003eAfter almost 20 years I changed Jobs, A decision which was extremely difficult to make; and honestly post that change point; I took at least 6 more months to adjust to the new world order.\u003c/p\u003e\n\u003cp\u003eI found myself amidst a team of like-minded peers, left to find a niche which I could own. Despite working with fantastic scenarios, these new challenges were amazing; and I was learning new stuff again. But, yet I still felt uninspired.\u003c/p\u003e\n\u003cp\u003eJust reflect on the number of blog posts I have published in the last 3 years.\u003c/p\u003e\n\u003cp\u003eMy personal life also took a major change; and today after celebrating 21 years of marriage; I am a super proud father of two amazing girls, with my oldest just after celebrating her 4 birthday and the youngest just turned 2.\u003c/p\u003e\n\u003cp\u003eWhen I reflect on these massive changes, it is a totally different world from when I stood just 10 years ago.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"inspiration\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Inspiration\n\u003c/h2\u003e\n\u003cp\u003eLast week I participated in my first \u003cstrong\u003eMicrosoft Ignite\u003c/strong\u003e event; and spent the vast majority of this opportunity meeting with so many old friends who have also evolved into completely new roles within their organizations.\u003c/p\u003e\n\u003cp\u003eAs an example, Mr Taylor Brown; I had the honour of meeting Taylor for the first time almost 12 years ago. Back then we both were working on Test Scenarios for Hyper-V; in his role, he ran the labs for Microsoft’s internal testing; and I was responsible for our internal \u003cem\u003eTechnology Adoption Program (TAP)\u003c/em\u003e Pilot testing. Today, Taylor owns the \u003cem\u003eDocker (Container)\u003c/em\u003e features in Windows Server. An amazing achievement, from an inspiring person and a good friend.\u003c/p\u003e\n\u003cp\u003eThere are so many amazing people, with just as amazing stories; and I was so proud to be able to stop, and say hello to these \u003cem\u003eicons\u003c/em\u003e, and learn how their lives have also changed.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"governance\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Governance\n\u003c/h2\u003e\n\u003cp\u003eAs the adoption, and practices of Cloud become centrally focused for so many organizations the focus shifts left, as Compliance, Control, and Culture changes ignite to enable a completely fresh view of the potential.\u003c/p\u003e\n\u003cp\u003eWhen I combine past experience, with the foundational tooling which 3rd parties like Terraform offer, and native tooling which Microsoft adding to the core of their offerings, the next challenge is clear.\u003c/p\u003e\n\u003cp\u003eNow, I see a clear path to assist organizations of any size to evolve from what might have been the chaos of Shadow IT, the central control of IT, or the old practices of Enterprise Architects; and guide them to a culture driven enablement of Cloud; supported with \u003cem\u003eGovernance\u003c/em\u003e and enabling that missing \u003cstrong\u003etrust\u003c/strong\u003e thought the use of \u003cem\u003eSafety Guard Rails\u003c/em\u003e\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"finding-my-mojo\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  Finding my Mojo\n\u003c/h2\u003e\n\u003cp\u003eLooking back at Ignite and the last 12 months of work; I now feel like I have a new rhythm. I have found a new passion - Namely that of enabling organizations on this transformation trough common sense, debate and technology.\u003c/p\u003e\n\u003cp\u003eAddressing political issues, and provisioning the structures of support required to encourage trust and co-operation, all of which is based on logical technical foundations \u003cem\u003e(Yes Mr Spock!)\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003eEven more rewarding, I am actually observing directly the impact this has on people and processes as they evolve their life’s with the culture changes required to start a new fabric of growth in cloud and DevOps practices; while also addressing their relationships with the business owners.\u003c/p\u003e\n\u003cp\u003eI believe I have found my \u003cem\u003eMojo\u003c/em\u003e.\u003c/p\u003e\n\u003ch2 class=\"relative text-3xl font-bold leading-tight text-secondary-500 mb-2 mt-12 -ml-px\"\u003e\n  \u003cdiv id=\"the-next-step\" class=\"absolute -top-28\"\u003e\u003c/div\u003e\n  The Next Step…\n\u003c/h2\u003e\n\u003cp\u003eOver the last years, I have had the honour of presenting at so many fantastic conferences, delivering workshops, and engagement in meetups. When I reflect on the topics I have focused on these all have contributed to building strong foundational elements to this new way.\u003c/p\u003e\n\u003cp\u003eTopics ranging from Containerization and Automation with Docker and Kubernetes, Serverless to AI, BOT Frameworks to Python, Git flow to Infrastructure as Code, DevOps to Event Handling; while all feel very disjointed, these technologies combined are core to understanding how the world is evolving, and therefore how the organizations can adopt.\u003c/p\u003e\n\u003cp\u003eIts time to \u003cstrong\u003eHit Refresh\u003c/strong\u003e, and join me on this next wave, as I share, present, document, and offer guidance; both here on the Blog, On stages in various locations and professionally, through a range of mediums from ‘hands-on’ demonstrations, Technical guides, papers, and talks.\u003c/p\u003e\n\u003cp\u003eI have my \u003cem\u003emojo\u003c/em\u003e charged and ready; Have You?\u003c/p\u003e\n",
        "language": "en"
    },
    ]
}
