{"id":13787003,"url":"https://github.com/Roblox/nomad-driver-iis","last_synced_at":"2025-05-12T00:30:36.318Z","repository":{"id":38426700,"uuid":"243582587","full_name":"Roblox/nomad-driver-iis","owner":"Roblox","description":"Nomad task driver for running windows IIS services.","archived":false,"fork":false,"pushed_at":"2024-04-01T18:35:55.000Z","size":372,"stargazers_count":51,"open_issues_count":12,"forks_count":22,"subscribers_count":21,"default_branch":"master","last_synced_at":"2024-11-18T00:37:17.779Z","etag":null,"topics":["golang","hashicorp-nomad","iis-website","nomad-driver-iis"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Roblox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-27T18:01:06.000Z","updated_at":"2024-09-09T00:57:06.000Z","dependencies_parsed_at":"2024-01-08T01:44:54.794Z","dependency_job_id":"ce12dbf3-d149-4b7f-ab07-fb0cc55c186f","html_url":"https://github.com/Roblox/nomad-driver-iis","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Roblox%2Fnomad-driver-iis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Roblox%2Fnomad-driver-iis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Roblox%2Fnomad-driver-iis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Roblox%2Fnomad-driver-iis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Roblox","download_url":"https://codeload.github.com/Roblox/nomad-driver-iis/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253655755,"owners_count":21943068,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","hashicorp-nomad","iis-website","nomad-driver-iis"],"created_at":"2024-08-03T20:00:24.541Z","updated_at":"2025-05-12T00:30:35.837Z","avatar_url":"https://github.com/Roblox.png","language":"Go","funding_links":[],"categories":["Plugins"],"sub_categories":["User Interfaces and Dashboards"],"readme":"# Nomad IIS Driver\n[![CI Actions Status](https://github.com/Roblox/nomad-driver-iis/workflows/CI/badge.svg)](https://github.com/Roblox/nomad-driver-iis/actions)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/Roblox/nomad-driver-iis/blob/master/LICENSE)\n[![Release](https://img.shields.io/badge/version-0.1.0-blue)](https://github.com/Roblox/nomad-driver-iis/releases/tag/v0.1.0)\n\nA driver plugin for nomad to orchestrate windows IIS website tasks.\n\nA \"Website\" is a combination of an application pool and a site (app, vdir, etc.).\u003cbr/\u003e\nEach allocation will create an application pool and site with the name being the allocation ID (guid).\n\nThis driver is heavily tested on Windows 2016+ and does not guarantee compatibility with older versions of Windows/IIS. IIS version and Windows versions are locked together and can be seen [here](https://en.wikipedia.org/wiki/Internet_Information_Services). Each feature/config has a minimum IIS version associated so that one can dance around them to have nomad and the IIS driver work on an older machine. The easiest way to utilize unique features for a given IIS version should be to use the application pool and site config imports provided by the task config.\n\n---\n## Configuration\n### **Driver Config**\n\n| Option | Type | Required | Default | Description |\n| :---: | :---: | :---: | :---: | :--- |\n| **enabled** | bool | no | true | Enable/Disable task driver. |\n| **stats_interval** | string | no | 1s | Interval for collecting `TaskStats` |\n\n### **Task Config**\n| Option | Type | Required | Default | Min. IIS Version | Description |\n| :---: | :---: | :---: | :---: | :---: | :--- |\n| **path** | string | yes | nil | 6.0 | Path to IIS Compatible website directory. |\n| **apppool_config_path** | string | no | nil | 6.0 | Path to App Pool XML Configuration File. |\n| **site_config_path** | string | no | nil | 6.0 | Path to Site XML Configuration File. |\n| **apppool_identity** | string | no | ApplicationPoolIdentity | 6.0 | Application Pool Identity e.g. ('SpecificUser', 'ApplicationPoolIdentity', etc..) |\n| **bindings** | block list | no | nil | 7.0 | This is needed to tie IIS Bindings to Nomad's `resources`-\u003e`network` ports to IIS as well as specify IIS Binding specific settings |\n### **Bindings Block Config**\nA `resource_port` OR a `port` must be provided. Due to a current limitation, we can not force at least 1 required option between multiple options. There are plans to revisit combining port options to improve UX.\n\n| Option | Type | Required | Default | Min. IIS Version | Description |\n| :---: | :---: | :---: | :---: | :---: | :--- |\n| **hostname** | string | no | nil | 7.0 | HostName attribute for a given binding. |\n| **ipaddress** | string | no | * | 7.0 | IPAddress attribute for a given binding. |\n| **port** | string | yes | 0 | 7.0 | Tie a `resources`-\u003e`network` port label to the binding. This allows us to use a dynamic port given by Nomad. |\n| **type** | string | yes | nil | 7.0 | Type is the binding's protocol e.g. ('http', 'https', etc..) |\n| **cert_hash** | string | no | nil | 7.0 | Hash of a cert that exists prior to nomad allocating an IIS website. This **must** be set for SSL bindings. |\nFor more info on IIS Bindings, you can go [here](https://docs.microsoft.com/en-us/iis/configuration/system.applicationhost/sites/site/bindings/binding)\n\n### **Environment Variables**\nEnvironment variables can be set like any other Nomad task via `env` or `template` stanzas. Environment variables are only supported for IIS 10.0+.\n\n### Meta Environment Variables\nThese meta env vars do not persist to the process/task. They are pulled from the env var list that is passed to the IIS application pool. These do not require a minimal IIS version as they are not used as env vars by IIS.\n\n- `NOMAD_APPPOOL_USERNAME`\n  - Sets the UserName of an application pool and will override the Application Pool Identity to `SpecificUser`\n- `NOMAD_APPPOOL_PASSWORD`\n  - Sets the Password of an application pool's specific user account\n\n### Why meta env vars?\nNomad currently doesn't have a clean way to use credentials to be used by the nomad job spec itself. To get around this and not provide the user/pass credentials in plain text on the nomad job spec is to have them passed by env vars and this allows users to utilize consul/vault via the `template` stanza to promote better security. Here is the respective Nomad [issue](https://github.com/hashicorp/nomad/issues/3854).\n\n---\n## Build \u0026 Test\n### **Requirements**\n\n- [Nomad](https://www.nomadproject.io/downloads.html) \u003e=v1.0\n   - The driver will try to be backwards compatible with v0.11-v1.0 versions of Nomad, but tests will focus around v1.0 for ensuring stability with modern Nomad.\n- [Go](https://golang.org/doc/install) \u003e=v1.15 (to build the provider plugin)\n- [Vagrant](https://www.vagrantup.com/downloads.html) \u003e=v2.2\n- [VirtualBox](https://www.virtualbox.org/) v6.0 (or any version vagrant is compatible with)\n\n### **Building the driver**\n\n````\n$ mkdir -p $GOPATH/src/github.com/Roblox\n$ cd $GOPATH/src/github.com/Roblox\n$ git clone git@github.com:Roblox/nomad-driver-iis.git\n$ cd nomad-driver-iis\n$ make build (This will build your nomad-driver-iis executable)\n````\n\n### **Tests**\n````\n$ make test\n````\nThis will run nomad-driver-iis tests in the provisioned vagrant VM.\n\n### **Cleanup**\n   ````\n   make clean\n   ````\n   This will destroy your vagrant VM (along with all your changes) and remove the executable (win_iis.exe).\n\n---\n## Contributing\n\nWant to fix a bug, update documentation or add a feature?\u003cbr/\u003e\nPR's are welcome!!\u003cbr/\u003e\nTest your changes locally before contributing.\n\nThe easiest way to test your changes is `make converge`.\u003cbr/\u003e\n`make converge` will:\n\n1) Build the executable (win_iis.exe)\u003cbr/\u003e\n2) Spin up a vagrant VM (`vagrant up`) if it's not already running.\u003cbr/\u003e\n3) Provision your changes into the VM (`vagrant provision`)\u003cbr/\u003e\n\nOnce you are in the VM:\n\n1) nomad-driver-iis codebase (hostpath) is mounted at `C:\\vagrant` in the VM.\u003cbr/\u003e\n2) Plugin (executable) is available at `C:\\ProgramData\\nomad\\plugin`\u003cbr/\u003e\n3) Logs are available at `C:\\ProgramData\\nomad\\logs`.\u003cbr/\u003e\n4) Tail on logs in powershell:\u003cbr/\u003e\n   ````\n   $ Get-Content -path \"C:\\ProgramData\\nomad\\logs\\nomad-output.log\" -wait\n   ````\n5) Launch an example IIS website:\n   ````\n   $ nomad job run C:\\vagrant\\examples\\iis-test.nomad\n   ````\n\n---\n## License\n\nCopyright 2020 Roblox Corporation\n\nLicensed under the Apache License, Version 2.0 (the \"License\"). For more information read the [License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRoblox%2Fnomad-driver-iis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FRoblox%2Fnomad-driver-iis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRoblox%2Fnomad-driver-iis/lists"}