app/services/foreman_salt/smart_proxies/salt_keys.rb
module ForemanSalt
module SmartProxies
class SaltKeys
attr_reader :name, :state, :fingerprint, :smart_proxy_id
def initialize(opts)
@name, @state, @fingerprint, @smart_proxy_id = opts.flatten
end
class << self
def all(proxy)
raise ::Foreman::Exception, N_('Must specify a Smart Proxy to use') if proxy.nil?
unless (keys = Rails.cache.read("saltkeys_#{proxy.id}"))
api = ProxyAPI::Salt.new(url: proxy.url)
keys = api.key_list.map do |name, properties|
new([name.strip, properties['state'], properties['fingerprint'], proxy.id])
end.compact
Rails.cache.write("saltkeys_#{proxy.id}", keys, expires_in: 1.minute) if Rails.env.production?
end
keys
end
def find(proxy, name)
all(proxy).find { |c| c.name == name }
end
def find_by_state(proxy, state)
all(proxy).select { |c| c.state == state }
end
end
def accept
proxy = SmartProxy.find(smart_proxy_id)
Rails.cache.delete("saltkeys_#{proxy.id}") if Rails.env.production?
ProxyAPI::Salt.new(url: proxy.url).key_accept name
end
def reject
proxy = SmartProxy.find(smart_proxy_id)
Rails.cache.delete("saltkeys_#{proxy.id}") if Rails.env.production?
ProxyAPI::Salt.new(url: proxy.url).key_reject name
end
def delete
proxy = SmartProxy.find(smart_proxy_id)
Rails.cache.delete("saltkeys_#{proxy.id}") if Rails.env.production?
ProxyAPI::Salt.new(url: proxy.url).key_delete name
end
def to_param
name
end
def to_s
name
end
def <=>(other)
name <=> other.name
end
end
end
end