48: def associate_machines_valid?
49: @mlist = get_machines
50: @alist = Rudy::AWS::EC2::Addresses.list || []
51: @alist_used = @alist.select { |a| a.associated? }
52: @alist_unused = @alist.select { |a| !a.associated? }
53: @alist_unused.collect! { |a| a.ipaddress }
54: @alist_instids = @alist_used.collect { |a| a.instid }
55: @mlist_static = @mlist.select do |m|
56: @alist_instids.member?(m.instid)
57: end
58:
59: unless @@global.force
60: unless @mlist_static.empty?
61: msg = "Some machines already have static IP addresses: #{$/}"
62: msg << @mlist_static.collect { |m| "#{m.name}: #{m.dns_public}" }.join($/)
63: raise Rudy::Error, msg
64: end
65:
66: if !@argv.empty? && @mlist.size > @argv.size
67: msg = "You supplied #{@argv.size} addresses for #{@mlist.size} "
68: msg << "machines. Try: rudy --force machines -S #{@argv.join(' ')}"
69: raise Rudy::Error, msg
70: end
71:
72: if @alist_unused.size > 0 && @alist_unused.size < @mlist.size
73: msg = "There are only #{@alist_unused.size} available addresses for "
74: msg << "#{@mlist.size} machines. Try: rudy --force machines -S #{@argv.join(' ')}"
75: raise Rudy::Error, msg
76: end
77: end
78:
79: @argv.each do |address|
80: unless Rudy::AWS::EC2::Addresses.exists?(address)
81: raise "#{address} is not allocated to you"
82: end
83: if Rudy::AWS::EC2::Addresses.associated?(address)
84: raise "#{address} is already associated!"
85: end
86: end
87:
88: @alist_unused = @argv unless @argv.empty?
89:
90: true
91: end