Sha256: 3f87c5a8eb1824fa7149cbe0b1f92db2a1765eb0a9dc17fc69219ee237057891

Contents?: true

Size: 1.37 KB

Versions: 1

Compression:

Stored size: 1.37 KB

Contents

# encoding: utf-8

module Doggy
  class CLI::Push
    WARNING_MESSAGE = "You are about to force push all the objects. "\
      "This will override changes in Datadog if they have not been sycned to the dog repository. "\
      "Do you want to proceed?(Y/N)"

    def initialize(options, ids)
      @options = options
      @ids = ids
    end

    def run
      if @ids.empty?
        if @options['all_objects'] && !Doggy.ui.yes?(WARNING_MESSAGE)
          Doggy.ui.say "Operation cancelled"
          return
        end
        push_resources('dashboards', Models::Dashboard) if @options['dashboards']
        push_resources('monitors',   Models::Monitor)   if @options['monitors']
        push_resources('screens',    Models::Screen)    if @options['screens']
      else
        Doggy::Model.all_local_resources.each do |resource|
          next unless @ids.include?(resource.id.to_s)
          Doggy.ui.say "Pushing #{ resource.path }"
          resource.ensure_read_only!
          resource.save
        end
      end

      Doggy::Model.emit_shipit_deployment
    end

  private

    def push_resources(name, klass)
      Doggy.ui.say "Pushing #{ name }"
      local_resources = klass.all_local(only_changed: !@options['all_objects'])
      local_resources.each(&:ensure_read_only!)
      Doggy.ui.say "#{ local_resources.size } objects to push"
      local_resources.each(&:save)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
doggy-2.0.30 lib/doggy/cli/push.rb