theforeman/foreman_salt

View on GitHub
app/lib/proxy_api/salt.rb

Summary

Maintainability
A
40 mins
Test Coverage
module ::ProxyAPI
  class Salt < ::ProxyAPI::Resource
    def initialize(args)
      @url = "#{args[:url]}/salt/"
      super args
    end

    def autosign_list
      parse(get('autosign'))
    rescue StandardError => e
      raise ProxyException.new(url, e, N_('Unable to fetch autosign list'))
    end

    def autosign_create(name)
      parse(post('', "autosign/#{CGI.escape(name)}"))
    rescue StandardError => e
      raise ProxyException.new(url, e, N_('Unable to set Salt autosign hostname for %s'), name)
    end

    def autosign_remove(name)
      parse(delete("autosign/#{CGI.escape(name)}"))
    rescue RestClient::ResourceNotFound
      true # entry doesn't exists anyway
    rescue StandardError => e
      raise ProxyException.new(url, e, N_('Unable to delete Salt autosign hostname for %s'), name)
    end

    def autosign_create_key(key)
      parse(post('', "autosign_key/#{CGI.escape(key)}"))
    rescue StandardError => e
      raise ProxyException.new(url, e, N_('Unable to create Salt autosign key %s'), key)
    end

    def autosign_remove_key(key)
      parse(delete("autosign_key/#{CGI.escape(key)}"))
    rescue RestClient::ResourceNotFound
      true # entry doesn't exists anyway
    rescue StandardError => e
      raise ProxyException.new(url, e, N_('Unable to delete Salt autosign key %s'), key)
    end

    def environments_list
      parse(get('environments'))
    rescue StandardError => e
      raise ProxyException.new(url, e, N_('Unable to fetch Salt environments list'))
    end

    def states_list
      states = {}

      environments_list.each do |environment|
        states[environment] = parse(get("environments/#{environment}"))
      end

      states
    rescue StandardError => e
      raise ProxyException.new(url, e, N_('Unable to fetch Salt states list'))
    end

    def key_list
      parse(get('key'))
    rescue StandardError => e
      raise ProxyException.new(url, e, N_('Unable to fetch Salt key list'))
    end

    def key_accept(name)
      parse(post('', "key/#{name}"))
    rescue StandardError => e
      raise ProxyException.new(url, e, N_('Unable to accept Salt key for %s'), name)
    end

    def key_reject(name)
      parse(delete("key/reject/#{name}"))
    rescue StandardError => e
      raise ProxyException.new(url, e, N_('Unable to reject Salt key for %s'), name)
    end

    def key_delete(name)
      parse(delete("key/#{name}"))
    rescue RestClient::ResourceNotFound
      true
    rescue StandardError => e
      raise ProxyException.new(url, e, N_('Unable to delete Salt key for %s'), name)
    end

    def highstate(name)
      parse(post('', "highstate/#{name}"))
    rescue StandardError => e
      raise ProxyException.new(url, e, N_('Unable to run Salt state.highstate for %s'), name)
    end
  end
end