Sha256: 49ccad7f0688133e09a147fa3b1049cc29d0fa133013b6cfa100af0f9b889a49

Contents?: true

Size: 1.93 KB

Versions: 1

Compression:

Stored size: 1.93 KB

Contents

class GoogleSslCert::CLI
  class Prune < Base
    include GoogleSslCert::Helpers::ProjectNumber

    def run
      keep = @options[:keep] || 1
      right = -1 - keep
      certs = ssl_certs[0..right] || [] # delete all except the last cert

      if certs.empty?
        logger.info "No timestamped certs to prune with cert name: #{cert_base_name}"
        return
      end

      preview_delete(certs) unless @options[:yes]
      sure?
      perform_delete(certs)
    end

    def preview_delete(certs)
      logger.info "Will delete the following #{type} certs:"
      certs.each do |cert|
        logger.info "  #{cert.name}"
      end
    end

    def perform_delete(certs)
      certs.each do |cert|
        delete(cert)
      end
    end

    def delete(cert)
      options = base_options.merge(ssl_certificate: cert.name)
      ssl_service.delete(options)
      logger.info "Deleted #{type} cert: #{cert.name}"
    end

    def type
      global? ? "global" : "region"
    end

    # sadly the filter option doesnt support globs or regexp so will have to filter with ruby
    def ssl_certs
      resp = ssl_service.list(base_options)
      resp.select do |ssl|
        match?(ssl.name)
      end.sort_by(&:name)
    end

    def match?(name)
      !!(name =~ Regexp.new("^#{cert_base_name}-\\d{14}$"))
    end

    def cert_base_name
      @cert_base_name = GoogleSslCert::Name.new(@options).base_name
    end

    def ssl_service
      if global?
        ssl_certificates
      else
        region_ssl_certificates
      end
    end

    def base_options
      options = { project: ENV['GOOGLE_PROJECT'] }
      options[:region] = ENV['GOOGLE_REGION'] unless global?
      options
    end

  private
    def sure?(message="Are you sure?")
      if @options[:yes]
        sure = 'y'
      else
        print "#{message} (y/N) "
        sure = $stdin.gets
      end

      unless sure =~ /^y/
        puts "Whew! Exiting."
        exit 0
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
google-ssl-cert-0.1.0 lib/google_ssl_cert/cli/prune.rb