All Projects → Roblox → nomad-driver-iis

Roblox / nomad-driver-iis

Licence: Apache-2.0 license
Nomad task driver for running windows IIS services.

Programming Languages

go
31211 projects - #10 most used programming language
powershell
5483 projects

Projects that are alternatives of or similar to nomad-driver-iis

spring-cloud-dataflow-server-nomad
Spring Cloud Data Flow Implementation for Hashicorp Nomad
Stars: ✭ 11 (-75.56%)
Mutual labels:  hashicorp-nomad
caravan
Caravan is your platform builder based on the HashiCorp stack.
Stars: ✭ 33 (-26.67%)
Mutual labels:  hashicorp-nomad
nomad-droplets-autoscaler
DigitalOcean Droplets target plugin for HashiCorp Nomad Autoscaler
Stars: ✭ 42 (-6.67%)
Mutual labels:  hashicorp-nomad
libra
A Nomad auto scaler
Stars: ✭ 72 (+60%)
Mutual labels:  hashicorp-nomad
rundeck-nomad-plugin
Rundeck plugin running jobs on Nomad cluster.
Stars: ✭ 17 (-62.22%)
Mutual labels:  hashicorp-nomad
nomad-driver-containerd
Nomad task driver for launching containers using containerd.
Stars: ✭ 152 (+237.78%)
Mutual labels:  hashicorp-nomad
rblx nurd
Open Source Nomad Usage Resource Dashboard
Stars: ✭ 21 (-53.33%)
Mutual labels:  hashicorp-nomad

Nomad IIS Driver

CI Actions Status License Release

A driver plugin for nomad to orchestrate windows IIS website tasks.

A "Website" is a combination of an application pool and a site (app, vdir, etc.).
Each allocation will create an application pool and site with the name being the allocation ID (guid).

This 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. 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.


Configuration

Driver Config

Option Type Required Default Description
enabled bool no true Enable/Disable task driver.
stats_interval string no 1s Interval for collecting TaskStats

Task Config

Option Type Required Default Min. IIS Version Description
path string yes nil 6.0 Path to IIS Compatible website directory.
apppool_config_path string no nil 6.0 Path to App Pool XML Configuration File.
site_config_path string no nil 6.0 Path to Site XML Configuration File.
apppool_identity string no ApplicationPoolIdentity 6.0 Application Pool Identity e.g. ('SpecificUser', 'ApplicationPoolIdentity', etc..)
bindings block list no nil 7.0 This is needed to tie IIS Bindings to Nomad's resources->network ports to IIS as well as specify IIS Binding specific settings

Bindings Block Config

A 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.

Option Type Required Default Min. IIS Version Description
hostname string no nil 7.0 HostName attribute for a given binding.
ipaddress string no * 7.0 IPAddress attribute for a given binding.
port string yes 0 7.0 Tie a resources->network port label to the binding. This allows us to use a dynamic port given by Nomad.
type string yes nil 7.0 Type is the binding's protocol e.g. ('http', 'https', etc..)
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.
For more info on IIS Bindings, you can go here

Environment Variables

Environment variables can be set like any other Nomad task via env or template stanzas. Environment variables are only supported for IIS 10.0+.

Meta Environment Variables

These 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.

  • NOMAD_APPPOOL_USERNAME
    • Sets the UserName of an application pool and will override the Application Pool Identity to SpecificUser
  • NOMAD_APPPOOL_PASSWORD
    • Sets the Password of an application pool's specific user account

Why meta env vars?

Nomad 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.


Build & Test

Requirements

  • Nomad >=v1.0
    • 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.
  • Go >=v1.15 (to build the provider plugin)
  • Vagrant >=v2.2
  • VirtualBox v6.0 (or any version vagrant is compatible with)

Building the driver

$ mkdir -p $GOPATH/src/github.com/Roblox
$ cd $GOPATH/src/github.com/Roblox
$ git clone [email protected]:Roblox/nomad-driver-iis.git
$ cd nomad-driver-iis
$ make build (This will build your nomad-driver-iis executable)

Tests

$ make test

This will run nomad-driver-iis tests in the provisioned vagrant VM.

Cleanup

make clean

This will destroy your vagrant VM (along with all your changes) and remove the executable (win_iis.exe).


Contributing

Want to fix a bug, update documentation or add a feature?
PR's are welcome!!
Test your changes locally before contributing.

The easiest way to test your changes is make converge.
make converge will:

  1. Build the executable (win_iis.exe)
  2. Spin up a vagrant VM (vagrant up) if it's not already running.
  3. Provision your changes into the VM (vagrant provision)

Once you are in the VM:

  1. nomad-driver-iis codebase (hostpath) is mounted at C:\vagrant in the VM.
  2. Plugin (executable) is available at C:\ProgramData\nomad\plugin
  3. Logs are available at C:\ProgramData\nomad\logs.
  4. Tail on logs in powershell:
    $ Get-Content -path "C:\ProgramData\nomad\logs\nomad-output.log" -wait
    
  5. Launch an example IIS website:
    $ nomad job run C:\vagrant\examples\iis-test.nomad
    

License

Copyright 2020 Roblox Corporation

Licensed under the Apache License, Version 2.0 (the "License"). For more information read the License.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].