示例#1
0
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)
示例#2
0
文件: main.py 项目: meltwater/lighter
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)
示例#3
0
    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)
示例#4
0
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
        })
示例#5
0
文件: maven.py 项目: spier/lighter
 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)
示例#6
0
文件: main.py 项目: dezmodue/lighter
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)