def notify(targetMarathonUrl, service): parsedMarathonUrl = urlparse(targetMarathonUrl) tags = ["environment:%s" % service.environment, "service:%s" % service.id] title = "Deployed %s to the %s environment" % (service.id, service.environment) # Send HipChat notification notify_message = "Deployed <b>%s</b> with image <b>%s</b> to <b>%s</b> (%s)" % ( service.id, service.image, service.environment, parsedMarathonUrl.netloc) if service.releaseNotes: notify_message += service.releaseNotes hipchat = HipChat(util.rget(service.document, 'hipchat', 'token'), util.rget(service.document, 'hipchat', 'url'), util.rget(service.document, 'hipchat', 'rooms')) hipchat.notify(notify_message) # Send NewRelic deployment notification newrelic = NewRelic(util.rget(service.document, 'newrelic', 'token')) newrelic.notify(util.rget(service.config, 'env', 'NEW_RELIC_APP_NAME'), service.uniqueVersion) # Send Datadog deployment notification datadog = Datadog( util.rget(service.document, 'datadog', 'token'), util.toList(util.rget(service.document, 'datadog', 'tags'))) datadog.notify( aggregation_key="%s_%s" % (service.environment, service.id), title=title, message= "%%%%%% \n Lighter deployed **%s** with image **%s** to **%s** (%s) \n %%%%%%" % (service.id, service.image, service.environment, parsedMarathonUrl.netloc), tags=tags) # Send Graphite deployment notification prefix = (util.rget(service.document, 'graphite', 'prefix') or 'lighter').strip('.') metricname = '%s.%s.%s.deployments' % ( prefix, service.environment, '.'.join( filter(bool, service.id.split('/')))) graphite = Graphite( util.rget(service.document, 'graphite', 'address'), util.rget(service.document, 'graphite', 'url'), util.toList(util.rget(service.document, 'graphite', 'tags'))) graphite.notify(metricname=metricname, title=title, message="Lighter deployed %s with image %s to %s (%s)" % (service.id, service.image, service.environment, parsedMarathonUrl.netloc), tags=tags)
def notify(targetMarathonUrl, service): parsedMarathonUrl = urlparse(targetMarathonUrl) tags = ["environment:%s" % service.environment, "service:%s" % service.id] title = "Deployed %s to the %s environment" % (service.id, service.environment) # Send HipChat notification hipchat = HipChat( util.rget(service.document, 'hipchat', 'token'), util.rget(service.document, 'hipchat', 'url'), util.rget(service.document, 'hipchat', 'rooms')) hipchat.notify("Deployed <b>%s</b> with image <b>%s</b> to <b>%s</b> (%s)" % (service.id, service.image, service.environment, parsedMarathonUrl.netloc)) # Send NewRelic deployment notification newrelic = NewRelic(util.rget(service.document, 'newrelic', 'token')) newrelic.notify( util.rget(service.config, 'env', 'NEW_RELIC_APP_NAME'), service.uniqueVersion) # Send Datadog deployment notification datadog = Datadog( util.rget(service.document, 'datadog', 'token'), util.toList(util.rget(service.document, 'datadog', 'tags'))) datadog.notify( aggregation_key="%s_%s" % (service.environment, service.id), title=title, message="%%%%%% \n Lighter deployed **%s** with image **%s** to **%s** (%s) \n %%%%%%" % ( service.id, service.image, service.environment, parsedMarathonUrl.netloc), tags=tags) # Send Graphite deployment notification prefix = (util.rget(service.document, 'graphite', 'prefix') or 'lighter').strip('.') metricname = '%s.%s.%s.deployments' % ( prefix, service.environment, '.'.join(filter(bool, service.id.split('/')))) graphite = Graphite( util.rget(service.document, 'graphite', 'address'), util.rget(service.document, 'graphite', 'url'), util.toList(util.rget(service.document, 'graphite', 'tags'))) graphite.notify( metricname=metricname, title=title, message="Lighter deployed %s with image %s to %s (%s)" % ( service.id, service.image, service.environment, parsedMarathonUrl.netloc), tags=tags)
def resolve(self, expression): # If it's not a valid version range expression, assume it's a specific version if not VersionRange.isExpression(expression): return expression # Fetch the available versions for this artifact metadata = util.xmlRequest('{0}/{1}/{2}/maven-metadata.xml'.format(self._url, self._groupid.replace('.', '/'), self._artifactid)) versions = util.toList(util.rget(metadata, 'versioning', 'versions', 'version')) logging.debug('%s:%s candidate versions %s', self._groupid, self._artifactid, versions) # Select the version that best matches the version range expression return self.selectVersion(expression, versions)
def apply_canary(canaryGroup, service): if not canaryGroup: return mangledGroup = util.mangle(canaryGroup) config = service.config config['id'] = '%s-canary-%s-%s' % ( config.get('id', ''), mangledGroup, hashlib.md5('%s-%s' % (canaryGroup, service.filename)).hexdigest()) config['instances'] = 1 # Rewrite service ports and add label for meltwater/proxymatic to read config['labels'] = config.get('labels', {}) ports = config.get('ports', []) for port, i in zip(ports, range(len(ports))): config['labels']['com.meltwater.proxymatic.port.%d.servicePort' % i] = str(port) config['ports'][i] = 0 mappings = util.toList( util.rget(config, 'container', 'docker', 'portMappings')) for mapping, i in zip(mappings, range(len(mappings))): config['labels']['com.meltwater.proxymatic.port.%d.servicePort' % i] = str(mapping['servicePort']) mapping['servicePort'] = 0 # Apply canary label to task so old canaries can be destroyed config['labels']['com.meltwater.lighter.filename'] = service.filename config['labels']['com.meltwater.lighter.canary.group'] = mangledGroup # Apply canary label to container so container metrics can be aggregated if util.rget(config, 'container', 'docker'): config['container']['docker']['parameters'] = config['container'][ 'docker'].get('parameters', []) config['container']['docker']['parameters'].append({ 'key': 'label', 'value': 'com.meltwater.lighter.canary.group=' + mangledGroup })
def resolve(self, expression): metadata = util.xmlRequest('{0}/{1}/{2}/maven-metadata.xml'.format(self._url, self._groupid.replace('.', '/'), self._artifactid)) versions = util.toList(util.rget(metadata,'versioning','versions','version')) logging.debug('%s:%s candidate versions %s', self._groupid, self._artifactid, versions) return self.selectVersion(expression, versions)
def notify(targetMarathonUrl, service): parsedMarathonUrl = urlparse(targetMarathonUrl) tags = ["environment:%s" % service.environment, "service:%s" % service.id] title = "Deployed %s to the %s environment" % (service.id, service.environment) # Send HipChat notification notify_message = "Deployed <b>%s</b> with image <b>%s</b> to <b>%s</b> (%s)" % ( service.id, service.image, service.environment, parsedMarathonUrl.netloc) if service.releaseNotes: notify_message += service.releaseNotes hipchat = HipChat(util.rget(service.document, 'hipchat', 'token'), util.rget(service.document, 'hipchat', 'url'), util.rget(service.document, 'hipchat', 'rooms')) hipchat.notify(notify_message) # Send Slack notification notify_payload = { "title_link": targetMarathonUrl, "fields": [{ "title": "Service", "value": service.id, "short": 'true' }, { "title": "Environment", "value": service.environment, "short": 'true' }, { "title": "Image", "value": service.image, "short": 'true' }], "ts": int(time.time()) } if service.releaseNotes: notify_payload = util.merge({'text': service.releaseNotes}, notify_payload) slack = Slack(util.rget(service.document, 'slack', 'token'), util.rget(service.document, 'slack', 'url'), util.rget(service.document, 'slack', 'channels')) slack.notify(notify_payload) # Send NewRelic deployment notification newrelic = NewRelic(util.rget(service.document, 'newrelic', 'token')) newrelic.notify(util.rget(service.config, 'env', 'NEW_RELIC_APP_NAME'), service.uniqueVersion) # Send Datadog deployment notification datadog = Datadog( util.rget(service.document, 'datadog', 'token'), util.toList(util.rget(service.document, 'datadog', 'tags'))) datadog.notify( aggregation_key="%s_%s" % (service.environment, service.id), title=title, message= "%%%%%% \n Lighter deployed **%s** with image **%s** to **%s** (%s) \n %%%%%%" % (service.id, service.image, service.environment, parsedMarathonUrl.netloc), tags=tags) # Send Graphite deployment notification prefix = (util.rget(service.document, 'graphite', 'prefix') or 'lighter').strip('.') metricname = '%s.%s.%s.deployments' % ( prefix, service.environment, '.'.join( filter(bool, service.id.split('/')))) graphite = Graphite( util.rget(service.document, 'graphite', 'address'), util.rget(service.document, 'graphite', 'url'), util.toList(util.rget(service.document, 'graphite', 'tags'))) graphite.notify(metricname=metricname, title=title, message="Lighter deployed %s with image %s to %s (%s)" % (service.id, service.image, service.environment, parsedMarathonUrl.netloc), tags=tags)