diff options
| author | elijah <elijah@riseup.net> | 2016-06-28 16:57:36 -0700 | 
|---|---|---|
| committer | elijah <elijah@riseup.net> | 2016-06-28 16:57:36 -0700 | 
| commit | 459e2e302378103f9ddbb4f4bde0b2133656ba06 (patch) | |
| tree | fcf0d0ad656f309c40fe74217a7a86fedb307f6d | |
| parent | 29d6b7dbbc3b9d8b11f0b215cad894fcfca9989c (diff) | |
added command `leap open monitor` for handy access to nagios
| -rw-r--r-- | lib/leap_cli/commands/open.rb | 103 | 
1 files changed, 103 insertions, 0 deletions
| diff --git a/lib/leap_cli/commands/open.rb b/lib/leap_cli/commands/open.rb new file mode 100644 index 00000000..3de97298 --- /dev/null +++ b/lib/leap_cli/commands/open.rb @@ -0,0 +1,103 @@ +module LeapCli +  module Commands + +    desc 'Opens useful URLs in a web browser.' +    long_desc "NAME can be one or more of: monitor, web, docs, bug" +    arg_name 'NAME' +    command :open do |c| +      c.flag :env, :desc => 'Which environment to use (optional).', :arg_name => 'ENVIRONMENT' +      c.switch :ip, :desc => 'To get around HSTS or DNS, open the URL using the IP address instead of the domain (optional).' +      c.action do |global_options,options,args| +        do_open_cmd(global_options, options, args) +      end +    end + +    private + +    def do_open_cmd(global, options, args) +      env = options[:env] || LeapCli.leapfile.environment +      args.each do |name| +        if name == 'monitor' || name == 'nagios' +          open_nagios(env, options[:ip]) +        elsif name == 'web' || name == 'webapp' +          open_webapp(env, options[:ip]) +        elsif name == 'docs' || name == 'help' || name == 'doc' +          open_url("https://leap.se/docs") +        elsif name == 'bug' || name == 'feature' || name == 'bugreport' +          open_url("https://leap.se/code") +        else +          bail! "'#{name}' is not a recognized URL." +        end +      end +    end + +    def find_node_with_service(service, environment) +      nodes = manager.nodes[:services => service] +      node = nil +      if nodes.size == 0 +        bail! "No nodes with '#{service}' service." +      elsif nodes.size == 1 +        node = nodes.values.first +      elsif nodes.size > 1 +        if environment +          node = nodes[:environment => environment].values.first +          if node.nil? +            bail! "No nodes with '#{service}' service." +          end +        else +          node_list = nodes.values +          list = node_list.map {|i| "#{i.name} (#{i.environment})"} +          index = numbered_choice_menu("Which #{service}?", list) do |line, i| +            say("#{i+1}. #{line}") +          end +          node = node_list[index] +        end +      end +      return node +    end + +    def pick_domain(node, ip) +      bail! "monitor missing webapp service" unless node["webapp"] +      if ip +        domain = node["ip_address"] +      else +        domain = node["webapp"]["domain"] +        bail! "webapp domain is missing" unless !domain.empty? +      end +      return domain +    end + +    def open_webapp(environment, ip) +      node = find_node_with_service('webapp', environment) +      domain = pick_domain(node, ip) +      open_url("https://%s" % domain) +    end + +    def open_nagios(environment, ip) +      node = find_node_with_service('monitor', environment) +      domain = pick_domain(node, ip) +      username = 'nagiosadmin' +      password = manager.secrets.retrieve("nagios_admin_password", node.environment) +      bail! "unable to find nagios_admin_password" unless !password.nil? && !password.empty? +      open_url("https://%s:%s@%s/nagios3" % [username, password, domain]) +    end + +    def open_url(url) +      log :opening, url +      if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/ +        system %(start "#{url}") +      elsif RbConfig::CONFIG['host_os'] =~ /darwin/ +        system %(open "#{url}") +      elsif RbConfig::CONFIG['host_os'] =~ /linux|bsd/ +        ['xdg-open', 'sensible-browser', 'gnome-open', 'kde-open'].each do |cmd| +          if !`which #{cmd}`.strip.empty? +            system %(#{cmd} "#{url}") +            return +          end +        end +        log :error, 'no command found to launch browser window.' +      end +    end + +  end +end
\ No newline at end of file | 
