{"id":1274,"date":"2022-02-03T22:02:41","date_gmt":"2022-02-03T22:02:41","guid":{"rendered":"https:\/\/tungle.ca\/?p=1274"},"modified":"2022-10-22T08:22:39","modified_gmt":"2022-10-22T16:22:39","slug":"install-iis-web-server-on-windows-2019-via-ansible","status":"publish","type":"post","link":"https:\/\/tungle.ca\/?p=1274","title":{"rendered":"Install IIS Web server on Windows 2019 via Ansible"},"content":{"rendered":"\n<p>This is a lab topology that is used to deploy the IIS Web server via Ansible.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"601\" height=\"304\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-33.png\" alt=\"\" class=\"wp-image-1275\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-33.png 601w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-33-300x152.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-33-200x101.png 200w\" sizes=\"auto, (max-width: 601px) 100vw, 601px\" \/><\/figure>\n\n\n\n<p>Configure WinRM service.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\"># Download a script to configure WinRM service on Windows Server 2019\n# This script sets up both HTTP and HTTPS listeners with a self-signed certificate # and enables the Basic authentication option on the service # (https:\/\/docs.ansible.com\/ansible\/2.5\/user_guide\/windows_setup.html)\nhttps:\/\/raw.githubusercontent.com\/ansible\/ansible\/devel\/examples\/scripts\/ConfigureRemotingForAnsible.ps1 -OutFile ConfigureRemotingForAnsible.ps1\n# Run the PS file.\npowershell -ExecutionPolicy RemoteSigned .\\ConfigureRemotingForAnsible.ps1\n.\\ConfigureRemotingForAnsible.ps1<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"841\" height=\"563\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-34.png\" alt=\"\" class=\"wp-image-1276\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-34.png 841w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-34-300x201.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-34-768x514.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-34-200x134.png 200w\" sizes=\"auto, (max-width: 841px) 100vw, 841px\" \/><\/figure>\n\n\n\n<p>Check WinRM service is running and WinRM port status is listening.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">Get-nettcpconnection -state listen\nget-service | where-object {$_.name -like \"*WInRM*\"}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"844\" height=\"591\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-35.png\" alt=\"\" class=\"wp-image-1277\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-35.png 844w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-35-300x210.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-35-768x538.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-35-200x140.png 200w\" sizes=\"auto, (max-width: 844px) 100vw, 844px\" \/><\/figure>\n\n\n\n<p>Check Windows Firewall to make sure only allow WinRM over SSL on 5986 port, instead of using 5985 port.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">Get-NetFirewallRule | where {$_.enabled -eq 'True' -and $_.Direction -eq 'Inbound' -and $_.DisplayName -like \"*Allow  WinRM*\"}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"831\" height=\"431\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-37.png\" alt=\"\" class=\"wp-image-1279\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-37.png 831w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-37-300x156.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-37-768x398.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-37-200x104.png 200w\" sizes=\"auto, (max-width: 831px) 100vw, 831px\" \/><\/figure>\n\n\n\n<p>Add Windows Server 2019 IP address into \/etc\/ansible\/hosts.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">[Windows2019]\n192.168.5.4<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"534\" height=\"190\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-38.png\" alt=\"\" class=\"wp-image-1280\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-38.png 534w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-38-300x107.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-38-200x71.png 200w\" sizes=\"auto, (max-width: 534px) 100vw, 534px\" \/><\/figure>\n\n\n\n<p>Create a new WIndows2019 file under the group_vars directory. Ansible connects to Windows Server 2019 via WinRM over TLS with the listening port is 5986. The file name should be Windows2019.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"582\" height=\"130\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-47.png\" alt=\"\" class=\"wp-image-1294\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-47.png 582w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-47-300x67.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-47-200x45.png 200w\" sizes=\"auto, (max-width: 582px) 100vw, 582px\" \/><\/figure>\n\n\n\n<p>Create a sample index.html file to copy to the IIS server directory on WIndows server 2019.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"markup\" class=\"language-markup\">&lt;html&gt;\n&lt;head&gt;\n\t&lt;title&gt;Tung Ansible&lt;\/title&gt; \n&lt;\/head&gt;\n&lt;body&gt;\n\t&lt;h1 style=\"background-color:DodgerBlue;\"&gt; Use Ansible to install and configure IIS on WIndows 2019&lt;\/h1&gt; \n\t&lt;h3 style=\"color:Tomato;\"&gt; Welcome to Tung's Ansbile Test Page&lt;\/h3&gt;\n\t&lt;img src=\"http:\/\/imagefromtheinternet.jpg\"&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"817\" height=\"221\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-40.png\" alt=\"\" class=\"wp-image-1282\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-40.png 817w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-40-300x81.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-40-768x208.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-40-200x54.png 200w\" sizes=\"auto, (max-width: 817px) 100vw, 817px\" \/><\/figure>\n\n\n\n<p>Run ansible to check to access Windows server 2019 machine.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">ansible Windows2019 -m win_ping\nansible Windows2019 -m setup<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"835\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-41.png\" alt=\"\" class=\"wp-image-1283\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-41.png 1000w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-41-300x251.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-41-768x641.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-41-200x167.png 200w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption>Now, we are ready to create an Ansible playbook for automatically installing and configuring the IIS Web server on Windows server 2019. Also, using ansible to retrieve IP address and disable Windows update service on Windows server machine. <\/figcaption><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">---\n- name: Windows Feature\n  hosts: Windows2019\n  gather_facts: true\n#  vars:\n#    name:\n#     - wuauserv\n\n#  vars:\n#    firstname: \"ABC\"\n#    lastname: \"XYZ\"\n\n  tasks:\n    - name: Disable Windows Updates Service\n      win_service:\n        name: wuauserv\n        state: stopped\n        enabled: false\n\n    - name: Run ipconfig and return IP address information.\n      raw: ipconfig\n      register: ipconfig\n    - debug: var=ipconfig\n\n#    - name: Reboot\n#      win_reboot:\n#      when: reboot.reboot_required\n\n# Install and enable IIS on Windows server 2019\n    - name: Install IIS\n      win_feature:\n        name: \"Web-Server\"\n        state: present\n        restart: yes\n        include_sub_features: yes\n        include_management_tools: yes\n# Copy the index.html file and rename to ansible.html under C:\\inetpub\\wwwroot. Must use \\\\ instead of \\ for accessing directory on Windows server.\n    - name: Copy index text page\n      win_copy:\n        src: \"files\/index.html\"\n        dest: \"C:\\\\inetpub\\\\wwwroot\\\\ansible.html\"<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"913\" height=\"928\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-43.png\" alt=\"\" class=\"wp-image-1285\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-43.png 913w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-43-295x300.png 295w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-43-768x781.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-43-197x200.png 197w\" sizes=\"auto, (max-width: 913px) 100vw, 913px\" \/><\/figure>\n\n\n\n<p>Run ansible-playbook with Windows2019 Yaml file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">ansible-playbook Windows2019.yml<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"621\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-45-1024x621.png\" alt=\"\" class=\"wp-image-1287\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-45-1024x621.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-45-300x182.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-45-768x466.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-45-200x121.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-45.png 1467w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Access the website on Windows server 2019.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"681\" height=\"648\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/7.png\" alt=\"\" class=\"wp-image-1288\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/7.png 681w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/7-300x285.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/7-200x190.png 200w\" sizes=\"auto, (max-width: 681px) 100vw, 681px\" \/><\/figure>\n\n\n\n<p>On Window server 2019.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1031\" height=\"814\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/8-1024x808.png\" alt=\"\" class=\"wp-image-1289\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/8-1024x808.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/8-300x237.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/8-768x606.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/8-200x158.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/8.png 1031w\" sizes=\"auto, (max-width: 1031px) 100vw, 1031px\" \/><\/figure>\n\n\n\n<p>Check connections on Windows server 2019.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"736\" height=\"217\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-46.png\" alt=\"\" class=\"wp-image-1291\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-46.png 736w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-46-300x88.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-46-200x59.png 200w\" sizes=\"auto, (max-width: 736px) 100vw, 736px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>This is a lab topology that is used to deploy the IIS Web server via Ansible. Configure WinRM service. Check WinRM service is running and WinRM port status is listening. Check Windows Firewall to make sure only allow WinRM over SSL on 5986 port, instead of using 5985 port. Add Windows Server 2019 IP address [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[16],"class_list":["post-1274","post","type-post","status-publish","format-standard","hentry","category-ansible","tag-ansible"],"_links":{"self":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/1274","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1274"}],"version-history":[{"count":5,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/1274\/revisions"}],"predecessor-version":[{"id":4317,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/1274\/revisions\/4317"}],"wp:attachment":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1274"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1274"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}