voxpupuli/puppet_webhook

View on GitHub
lib/puppet_webhook/chatops/rocketchat.rb

Summary

Maintainability
A
35 mins
Test Coverage
# frozen_string_literal: true

require 'rocket-chat-notifier'

class PuppetWebhook
  class Chatops
    # Sets up Rocketchat object that will send notifications to Slack via a webhook.
    class Rocketchat
      def initialize(channel, url, user, message, options = {})
        @channel = channel
        @url = url
        @user = user
        @message = message
        @options = options
      end

      def notify
        notifier = RocketChat::Notifier.new @url, http_options: @options[:http_options]
        notifier.username = @user
        notifier.channel = @channel

        target = if @message[:branch]
                   @message[:branch]
                 elsif @message[:module]
                   @message[:module]
                 end

        msg = "r10k deployment of Puppet environment/module #{target} started..."

        attachment = format_attachment(target)

        notifier.ping(msg, icon_emoji: @options[:icon_emoji], attachments: [attachment])
      end

      private

      def format_attachment(target)
        attachment = {
          author: 'r10k for Puppet',
          title: "r10k deployment of Puppet environment #{target}"
        }

        case @message[:status_code]
        when 200
          attachment.merge!(
            color: 'good',
            text: "Successfully started deployment of #{target}",
            fallback: "Successfully started deployment of #{target}"
          )
        when 500
          attachment.merge!(
            color: 'bad',
            text: "Failed to deploy #{target}",
            fallback: "Failed to deploy #{target}"
          )
        end

        attachment
      end
    end
  end
end