Skip to content

Instantly share code, notes, and snippets.

@stevemcquaid
Created December 1, 2014 19:19
Show Gist options
  • Save stevemcquaid/8162558377190ea5ea55 to your computer and use it in GitHub Desktop.
Save stevemcquaid/8162558377190ea5ea55 to your computer and use it in GitHub Desktop.
Qubell Manifest - Availcheck
application:
interfaces:
input:
enable-exclusion-check: 'bind(workflow#input.enable-exclusion-check)'
enable-whois: 'bind(workflow#input.enable-whois)'
message-queue-name: 'bind(workflow#input.message-queue-name)'
verbose-log: 'bind(workflow#input.verbose-log)'
refresh-timer: 'bind(workflow#input.refresh-timer)'
version: 'bind(workflow#input.version)'
iis:
setup-server: 'bind(workflow#iis.setup-server)'
setup-site: 'bind(workflow#iis.setup-site)'
IIS-server-ip: 'bind(workflow#iis.IIS-server-ip)'
conman-db:
database: 'bind(workflow#conman-db.database)'
user: 'bind(workflow#conman-db.user)'
password: 'bind(workflow#conman-db.password)'
host: 'bind(workflow#conman-db.host)'
dbms: 'bind(workflow#conman-db.dbms)'
domains-db:
database: 'bind(workflow#domains-db.database)'
user: 'bind(workflow#domains-db.user)'
password: 'bind(workflow#domains-db.password)'
host: 'bind(workflow#domains-db.host)'
dbms: 'bind(workflow#domains-db.dbms)'
nimitz:
nimitz-certificate-name: 'bind(workflow#nimitz.nimitz-certificate-name)'
ctld:
ctld-primary: 'bind(workflow#ctld.ctld-primary)'
ctld-secondary: 'bind(workflow#ctld.ctld-secondary)'
ctld-port: 'bind(workflow#ctld.ctld-port)'
mongo:
nodes: 'bind(workflow#mongo.nodes)'
idnapisvc:
idn-pipe-name: 'bind(workflow#idnapisvc.idn-pipe-name)'
idn-server-name: 'bind(workflow#idnapisvc.idn-server-name)'
result:
availcheck-url: 'bind(workflow#result.availcheck-url)'
installed-version: 'bind(workflow#result.installed-version)'
application-pic: 'bind(metadata#output.application-pic)'
bindings:
- [credentials, workflow]
configuration:
input.refresh-timer: 600
input.verbose-log: false
input.message-queue-name: ""
input.enable-whois: 0
input.enable-exclusion-check: 1
input.version: 'master'
components:
metadata:
type: cobalt.common.Constants
interfaces:
output:
application-pic:
type: publish-signal(map<string, object>)
name: ""
configuration:
configuration.values:
output.application-pic:
large: "https://cdn2.iconfinder.com/data/icons/metro-uinvert-dock/256/OS_Windows_8.png"
small: "https://cdn2.iconfinder.com/data/icons/metro-uinvert-dock/256/OS_Windows_8.png"
small-height: 100
credentials:
type: reference.Service
interfaces:
credentials:
gd-service-user: publish-signal(string)
gd-service-password: publish-signal(string)
workflow:
type: workflow.Instance
interfaces:
# this is standard interface describing workflow parameters. it can contain only configurations
input:
enable-exclusion-check: configuration(int)
enable-whois: configuration(int)
message-queue-name: configuration(string)
verbose-log: configuration(bool)
refresh-timer: configuration(int)
version: configuration(string)
# here goes interfaces for dependencies
nimitz:
nimitz-certificate-name: consume-signal(string)
mongo:
nodes: consume-signal(list<record<string host,int port>>)
ctld:
ctld-primary: consume-signal(string)
ctld-secondary: consume-signal(string)
ctld-port: consume-signal(int)
iis:
setup-server: send-command(string script)
setup-site: send-command(string script-url, string pool-name, string app-name, string site-name, string site-path, string user-name, string user-password)
IIS-server-ip: consume-signal(list<string>)
domains-db:
database: consume-signal(string)
user: consume-signal(string)
password: consume-signal(string)
host: consume-signal(string)
dbms: consume-signal(object)
conman-db:
database: consume-signal(string)
user: consume-signal(string)
password: consume-signal(string)
host: consume-signal(string)
dbms: consume-signal(object)
idnapisvc:
idn-pipe-name: consume-signal(string)
idn-server-name: consume-signal(string)
credentials:
gd-service-user: consume-signal(string)
gd-service-password: consume-signal(string)
# this is standard interface with results. it can contain only signals
result:
availcheck-url: publish-signal(string)
installed-version: publish-signal(string)
# workflow will wait for required interfaces to become active before start
required: [nimitz, mongo, ctld, domains-db, conman-db, iis, credentials, idnapisvc]
configuration:
configuration.triggers:
input.version: update
configuration.propagateStatus: [update]
configuration.workflows:
launch: &install
steps:
- get-signals:
action: getSignals
output:
signals: result
- install-availcheck:
action: commandCall
precedingPhases: [get-signals]
parameters:
service: iis
command: setup-server
timeout: 15 minutes
arguments:
script:
|
$$CODE_DIR=$$(C:/cygwin64/bin/mktemp.exe -dt availcheck.XXXX)
Write-Host "Unpacking availcheck data to $$CODE_DIR"
cd $$(C:/cygwin64/bin/cygpath.exe -w "$$CODE_DIR")
C:/cygwin64/bin/bash.exe -c "curl -L 'https://nsokolov:ff8077a1d2d87e00e0e0564b54c63c1eb9b91caa@github.secureserver.net/api/v3/repos/nsokolov/availcheck-install/tarball/{$.version}' | tar xzp --strip-components=1"
Set-ExecutionPolicy Unrestricted
if ("{$.signals.nimitz.nimitz-certificate-name}" -eq "mock") {{
$$nimitzData = @{{
"registrar.services.conman" = @{{
Host = "{$.signals.conman-db.host}";
Database="{$.signals.conman-db.database}";
User = "{$.signals.conman-db.dbms.db-root-user}";
Password = "{$.signals.conman-db.dbms.db-root-password}"
}};
"registrar.services.domains" = @{{
Host = "{$.signals.domains-db.host}";
Database="{$.signals.domains-db.database}";
User = "{$.signals.domains-db.dbms.db-root-user}";
Password = "{$.signals.domains-db.dbms.db-root-password}"
}}
}}
}} else {{
$$nimitzData = @{{}}
}}
$$settings = @{{
"AvailCheckWebSvc_CtldServer" = "{$.signals.ctld.ctld-primary}";
"AvailCheckWebSvc_CtldServer_Secondary" = "{$.signals.ctld.ctld-secondary}";
"AvailCheckWebSvc_CtldPort" = "{$.signals.ctld.ctld-port}";
"AvailCheckWebSvc_EnableExclusionCheck" = "{$.enable-exclusion-check}";
"AvailCheckWebSvc_EnableCheckWhoIsSvc" = "{$.enable-whois}";
"AvailCheckWebSvc_MessageQueueName" = "{$.message-queue-name}";
"AvailCheckWebSvc_LogPath" = "C:\\Registrar Server Components\\AvailCheckWebSvc_Logs";
"AvailCheckWebSvc_ZoneFileSupportedTlds" = "com,org,gov";
"AvailCheckWebSvc_IDNApiIPCPipeName" = "{$.signals.idnapisvc.idn-pipe-name}";
"AvailCheckWebSvc_IDNApiIPCPipeServer" = "{$.signals.idnapisvc.idn-server-name}";
"AvailCheckWebSvc_MongoReplicaSet" = $$false;
"AvailCheckWebSvc_MongoSlaveOk" = $$true;
"AvailCheckWebSvc_MongoReplicaSetNodes" = "{$.signals.mongo.nodes[0].host}|{$.signals.mongo.nodes[0].port}";
"AvailCheckWebSvc_MongoDatabase" = "availcheckwebsvc";
"AvailCheckWebSvc_MongoCollection" = "exclusions";
"AvailCheckWebSvc_PremiumTierZone_MongoCollection" = "premiumtierzone";
}}
./service.ps1 "AvailCheckWebSvc" "{$.signals.credentials.gd-service-user}" "{$.signals.credentials.gd-service-password}" $$nimitzData $$settings
if ($$settings.AvailCheckWebSvc_CtldServer -eq "localhost") {{
./ctld-mock/install.ps1 $$settings.AvailCheckWebSvc_CtldPort
}}
- setup-site:
action: commandCall
precedingPhases: [install-availcheck]
parameters:
service: iis
command: setup-site
timeout: 15 minutes
arguments:
script-url: "https://nsokolov:ff8077a1d2d87e00e0e0564b54c63c1eb9b91caa@github.secureserver.net/nsokolov/availcheck-install/raw/{$.version}/cookbooks/iis.ps1"
pool-name: "AvailCheckWebSvcPool"
app-name: "AvailCheckWebSvc"
site-name: "availcheck-test"
site-path: 'C:\Registrar Server Components\AvailCheckWebSvc'
user-name: '{$.signals.credentials.gd-service-user}'
user-password: '{$.signals.credentials.gd-service-password}'
return:
availcheck-url:
value: "http://{$.signals.iis.IIS-server-ip[0]}/AvailCheckWebSvc/AvailCheckWebSvc.asmx"
installed-version:
value: "{$.version}"
update:
*install
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment