lib/redis_failover/cli.rb in redis_failover-0.5.4 vs lib/redis_failover/cli.rb in redis_failover-0.6.0

- old
+ new

@@ -1,53 +1,64 @@ module RedisFailover # Parses server command-line arguments. class CLI def self.parse(source) - return {} if source.empty? - options = {} parser = OptionParser.new do |opts| opts.banner = "Usage: redis_node_manager [OPTIONS]" + opts.separator "" + opts.separator "Specific options:" - opts.on('-p', '--password password', 'Redis password (optional)') do |password| - options[:password] = password.strip - end - - opts.on('-n', '--nodes redis nodes', - 'Comma-separated redis host:port pairs (required)') do |nodes| + opts.on('-n', '--nodes NODES', + 'Comma-separated redis host:port pairs') do |nodes| # turns 'host1:port,host2:port' => [{:host => host, :port => port}, ...] options[:nodes] = nodes.split(',').map do |node| Hash[[:host, :port].zip(node.strip.split(':'))] end end - opts.on('-z', '--zkservers ZooKeeper servers', - 'Comma-separated ZooKeeper host:port pairs (required)') do |servers| - options[:zkservers] = servers + opts.on('-z', '--zkservers SERVERS', + 'Comma-separated ZooKeeper host:port pairs') do |servers| + options[:zkservers] = servers.strip end - opts.on('--znode-path path', - 'Znode path override for storing redis server list (optional)') do |path| + opts.on('-p', '--password [PASSWORD]', 'Redis password') do |password| + options[:password] = password.strip + end + + opts.on('--znode-path [PATH]', + 'Znode path override for storing redis server list') do |path| options[:znode_path] = path end - opts.on('--max-failures count', - 'Max failures before manager marks node unavailable (default 3)') do |max| + opts.on('--max-failures [COUNT]', + 'Max failures before manager marks node unavailable') do |max| options[:max_failures] = Integer(max) end opts.on('-h', '--help', 'Display all options') do puts opts exit end end parser.parse(source) + if required_options_missing?(options) + puts parser + exit + end + # assume password is same for all redis nodes if password = options[:password] options[:nodes].each { |opts| opts.update(:password => password) } end options + end + + def self.required_options_missing?(options) + return true if options.empty? + return true unless options.values_at(:nodes, :zkservers).all? + false end end end \ No newline at end of file