kuzushi 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/kuzushi.rb +85 -46
- metadata +2 -2
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.0. | 
| 1 | 
            +
            0.0.9
         | 
    
        data/lib/kuzushi.rb
    CHANGED
    
    | @@ -4,6 +4,12 @@ require 'restclient' | |
| 4 4 | 
             
            require 'ostruct'
         | 
| 5 5 | 
             
            require 'rush'
         | 
| 6 6 | 
             
            require 'ohai'
         | 
| 7 | 
            +
            require 'erb'
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            ## IDEAS
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            ## firewall until ready
         | 
| 12 | 
            +
            ## ruby 1.9 compatibility
         | 
| 7 13 |  | 
| 8 14 | 
             
            class Kuzushi
         | 
| 9 15 | 
             
            	def initialize(url)
         | 
| @@ -15,10 +21,29 @@ class Kuzushi | |
| 15 21 | 
             
            		@tasks = []
         | 
| 16 22 | 
             
            		load_config_stack(@name)
         | 
| 17 23 | 
             
            		@config = @configs.reverse.inject({}) { |i,c| i.merge(c) }
         | 
| 24 | 
            +
            	end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            	def init
         | 
| 27 | 
            +
            		@init = true
         | 
| 28 | 
            +
            		start
         | 
| 29 | 
            +
            	end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            	def start
         | 
| 32 | 
            +
            		process_stack
         | 
| 33 | 
            +
            		puts "----"
         | 
| 34 | 
            +
            		@tasks.each do |t|
         | 
| 35 | 
            +
            			puts "TASK: #{t[:description]}"
         | 
| 36 | 
            +
            			t[:blk].call
         | 
| 37 | 
            +
            		end
         | 
| 38 | 
            +
            		puts "----"
         | 
| 39 | 
            +
            	end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            	protected
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            	def system
         | 
| 18 44 | 
             
            		ohai = Ohai::System.new
         | 
| 19 45 | 
             
            		ohai.all_plugins
         | 
| 20 | 
            -
            		 | 
| 21 | 
            -
            		process_stack
         | 
| 46 | 
            +
            		ohai
         | 
| 22 47 | 
             
            	end
         | 
| 23 48 |  | 
| 24 49 | 
             
            	def load_config_stack(name)
         | 
| @@ -36,12 +61,11 @@ class Kuzushi | |
| 36 61 | 
             
            		process :local_packages
         | 
| 37 62 | 
             
            		process :gems
         | 
| 38 63 | 
             
            		process :volumes
         | 
| 39 | 
            -
            		process :raids
         | 
| 40 | 
            -
            		process :mounts
         | 
| 41 64 | 
             
            		process :files
         | 
| 42 65 | 
             
            		process :users
         | 
| 43 66 |  | 
| 44 67 | 
             
            		script get("after")
         | 
| 68 | 
            +
            		script get("init") if init?
         | 
| 45 69 | 
             
            	end
         | 
| 46 70 |  | 
| 47 71 | 
             
            	## magic goes here
         | 
| @@ -59,6 +83,7 @@ class Kuzushi | |
| 59 83 | 
             
            					send("process_#{type}", item)
         | 
| 60 84 | 
             
            				end
         | 
| 61 85 | 
             
            				script item["after"]
         | 
| 86 | 
            +
            				script item["init"] if init?
         | 
| 62 87 | 
             
            			end
         | 
| 63 88 | 
             
            		end
         | 
| 64 89 | 
             
            	end
         | 
| @@ -66,7 +91,7 @@ class Kuzushi | |
| 66 91 | 
             
            	def process_packages
         | 
| 67 92 | 
             
            		@packages = get_array("packages")
         | 
| 68 93 | 
             
            		task "install packages" do
         | 
| 69 | 
            -
            			shell "apt-get update && apt-get upgrade -y && apt-get install -y #{@packages.join(" ")}" | 
| 94 | 
            +
            			shell "apt-get update && apt-get upgrade -y && apt-get install -y #{@packages.join(" ")}"
         | 
| 70 95 | 
             
            		end
         | 
| 71 96 | 
             
            	end
         | 
| 72 97 |  | 
| @@ -85,39 +110,56 @@ class Kuzushi | |
| 85 110 | 
             
            	end
         | 
| 86 111 |  | 
| 87 112 | 
             
            	def process_volumes(v)
         | 
| 113 | 
            +
            		handle_ebs    v if v.type == "ebs"
         | 
| 114 | 
            +
            		handle_raid   v if v.type == "raid"
         | 
| 115 | 
            +
            		set_readahead v if v.readahead
         | 
| 116 | 
            +
            		set_scheduler v if v.scheduler
         | 
| 117 | 
            +
            		handle_format v if v.format
         | 
| 118 | 
            +
            		handle_mount  v if v.mount
         | 
| 119 | 
            +
            	end
         | 
| 120 | 
            +
             | 
| 121 | 
            +
            	def handle_ebs(v)
         | 
| 88 122 | 
             
            		task "wait for volume #{v.device}" do
         | 
| 89 123 | 
             
            			wait_for_volume v.device
         | 
| 90 124 | 
             
            		end
         | 
| 91 | 
            -
            		set_readahead v 
         | 
| 92 | 
            -
            		set_scheduler v 
         | 
| 93 | 
            -
            		check_format  v 
         | 
| 94 125 | 
             
            	end
         | 
| 95 126 |  | 
| 96 | 
            -
            	def  | 
| 97 | 
            -
            		task " | 
| 98 | 
            -
            			 | 
| 127 | 
            +
            	def handle_raid(r)
         | 
| 128 | 
            +
            		task "create raid #{r.device}", :init => true do
         | 
| 129 | 
            +
            			shell "mdadm --create #{r.device} -n #{r.drives.size} -l #{r.level} -c #{r.chunksize || 64} #{r.drives.join(" ")}"
         | 
| 130 | 
            +
            		end
         | 
| 131 | 
            +
            		task "assemble raid #{r.device}" do  ## assemble fails a lot with device busy - is udev to blame :(
         | 
| 132 | 
            +
            			if not dev_exists? r.device
         | 
| 133 | 
            +
            				shell "service stop udev"
         | 
| 99 134 | 
             
            				shell "mdadm --assemble #{r.device} #{r.drives.join(" ")}"
         | 
| 100 | 
            -
             | 
| 101 | 
            -
            				## sometimes the disks come back with odd error messages - retry seems to be the best option
         | 
| 102 | 
            -
            				puts "error: #{o.message}"
         | 
| 103 | 
            -
            				retry
         | 
| 135 | 
            +
            				shell "service start udev"
         | 
| 104 136 | 
             
            			end
         | 
| 105 137 | 
             
            		end
         | 
| 106 | 
            -
            		set_readahead r
         | 
| 107 | 
            -
            		set_scheduler r
         | 
| 108 | 
            -
            		check_format  r
         | 
| 109 138 | 
             
            		add_package "mdadm"
         | 
| 110 139 | 
             
            	end
         | 
| 111 140 |  | 
| 112 | 
            -
            	def  | 
| 113 | 
            -
            		task "mount #{m. | 
| 114 | 
            -
            			shell "mkdir -p #{m. | 
| 141 | 
            +
            	def handle_mount(m)
         | 
| 142 | 
            +
            		task "mount #{m.device}" do
         | 
| 143 | 
            +
            			shell "mkdir -p #{m.mount} && mount -o #{m.options || "noatime"} #{m.device} #{m.mount}" unless mounted?(m.device)
         | 
| 115 144 | 
             
            		end
         | 
| 116 145 | 
             
            	end
         | 
| 117 146 |  | 
| 147 | 
            +
            	def system_arch
         | 
| 148 | 
            +
            		system.kernel["machine"]
         | 
| 149 | 
            +
            	end
         | 
| 150 | 
            +
             | 
| 151 | 
            +
            	def mounted?(dev)
         | 
| 152 | 
            +
            		!!system.filesystem[dev]["mount"]
         | 
| 153 | 
            +
            	end
         | 
| 154 | 
            +
             | 
| 155 | 
            +
            	def package_arch
         | 
| 156 | 
            +
            		`dpkg --print-architecture`.chomp
         | 
| 157 | 
            +
            	end
         | 
| 158 | 
            +
             | 
| 118 159 | 
             
            	def process_files(f)
         | 
| 119 160 | 
             
            		fetch("/templates/#{f.template}") do |file|
         | 
| 120 161 | 
             
            			task "setting up #{f.file}" do
         | 
| 162 | 
            +
            				@system = system
         | 
| 121 163 | 
             
            				t = ERB.new File.read(file), 0, '<>'
         | 
| 122 164 | 
             
            				File.open(f.file,"w") { |f| f.write(t.render) }
         | 
| 123 165 | 
             
            			end
         | 
| @@ -129,26 +171,26 @@ class Kuzushi | |
| 129 171 | 
             
            			task "add authorized_key for user #{user.name}" do
         | 
| 130 172 | 
             
            				shell "su - #{user.name} -c 'mkdir -p .ssh; echo \"#{key}\" >> .ssh/authorized_keys; chmod -R 0600 .ssh'"
         | 
| 131 173 | 
             
            			end
         | 
| 132 | 
            -
            		end | 
| 174 | 
            +
            		end
         | 
| 133 175 | 
             
            	end
         | 
| 134 176 |  | 
| 135 177 | 
             
            	def set_readahead(v)
         | 
| 136 | 
            -
            		 | 
| 137 | 
            -
            			 | 
| 138 | 
            -
            				shell "blockdev --setra #{v.readahead} #{v.device}"
         | 
| 139 | 
            -
            			end
         | 
| 178 | 
            +
            		task "set readahead for #{v.device}" do
         | 
| 179 | 
            +
            			shell "blockdev --setra #{v.readahead} #{v.device}"
         | 
| 140 180 | 
             
            		end
         | 
| 141 181 | 
             
            	end
         | 
| 142 182 |  | 
| 143 183 | 
             
            	def set_scheduler(v)
         | 
| 144 | 
            -
            		 | 
| 145 | 
            -
            			 | 
| 146 | 
            -
            				shell "echo #{v.scheduler} > /sys/block/#{File.basename(v.device)}/queue/scheduler"
         | 
| 147 | 
            -
            			end
         | 
| 184 | 
            +
            		task "set scheduler for #{v.device}" do
         | 
| 185 | 
            +
            			shell "echo #{v.scheduler} > /sys/block/#{File.basename(v.device)}/queue/scheduler"
         | 
| 148 186 | 
             
            		end
         | 
| 149 187 | 
             
            	end
         | 
| 150 188 |  | 
| 151 | 
            -
            	def  | 
| 189 | 
            +
            	def handle_format(v)
         | 
| 190 | 
            +
            		task "formatting #{v.device}", :init => true do
         | 
| 191 | 
            +
            			label = "-L " + v.label rescue ""
         | 
| 192 | 
            +
            			"mkfs.#{v.format} #{label} #{v.device}"
         | 
| 193 | 
            +
            		end
         | 
| 152 194 | 
             
            		add_package "xfsprogs" if v.format == "xfs"
         | 
| 153 195 | 
             
            	end
         | 
| 154 196 |  | 
| @@ -157,7 +199,7 @@ class Kuzushi | |
| 157 199 | 
             
            	end
         | 
| 158 200 |  | 
| 159 201 | 
             
            	def package(p, &block)
         | 
| 160 | 
            -
            		fetch("/packages/#{p} | 
| 202 | 
            +
            		fetch("/packages/#{p}_#{package_arch}.deb") do |file|
         | 
| 161 203 | 
             
            			block.call(file)
         | 
| 162 204 | 
             
            		end
         | 
| 163 205 | 
             
            	end
         | 
| @@ -221,31 +263,28 @@ class Kuzushi | |
| 221 263 | 
             
            	end
         | 
| 222 264 |  | 
| 223 265 | 
             
            	def wait_for_volume(vol)
         | 
| 224 | 
            -
            		 | 
| 266 | 
            +
            		## Maybe use ohai here instead -- FIXME
         | 
| 267 | 
            +
            		until dev_exists? vol do
         | 
| 225 268 | 
             
            			puts "waiting for volume #{vol}"
         | 
| 226 269 | 
             
            			sleep 2
         | 
| 227 270 | 
             
            		end
         | 
| 228 271 | 
             
            	end
         | 
| 229 272 |  | 
| 230 | 
            -
            	def  | 
| 231 | 
            -
            		puts " | 
| 232 | 
            -
            		 | 
| 233 | 
            -
            			puts "TASK: #{t[:description]}"
         | 
| 234 | 
            -
            			t[:blk].call
         | 
| 235 | 
            -
            		end
         | 
| 236 | 
            -
            		puts "----"
         | 
| 273 | 
            +
            	def shell(cmd)
         | 
| 274 | 
            +
            		puts "# #{cmd}"
         | 
| 275 | 
            +
            		puts Rush.bash cmd
         | 
| 237 276 | 
             
            	end
         | 
| 238 277 |  | 
| 239 | 
            -
            	def  | 
| 240 | 
            -
            		 | 
| 241 | 
            -
            		puts Rush.bash cmd, :env => env
         | 
| 278 | 
            +
            	def init?
         | 
| 279 | 
            +
            		@init ||= false
         | 
| 242 280 | 
             
            	end
         | 
| 243 281 |  | 
| 244 | 
            -
            	def task(description, &blk)
         | 
| 282 | 
            +
            	def task(description, options = {} &blk)
         | 
| 283 | 
            +
            		return if options[:init] and not init?
         | 
| 245 284 | 
             
            		@tasks << { :description => description, :blk => blk }
         | 
| 246 285 | 
             
            	end
         | 
| 247 286 |  | 
| 248 | 
            -
            	def  | 
| 249 | 
            -
            		 | 
| 287 | 
            +
            	def dev_exists?(dev)
         | 
| 288 | 
            +
            		File.exists?("/sys/block/#{File.basename(dev)}")
         | 
| 250 289 | 
             
            	end
         | 
| 251 290 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: kuzushi
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.9
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors: 
         | 
| 7 7 | 
             
            - Orion Henry
         | 
| @@ -9,7 +9,7 @@ autorequire: | |
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 11 |  | 
| 12 | 
            -
            date: 2010-02- | 
| 12 | 
            +
            date: 2010-02-21 00:00:00 -05:00
         | 
| 13 13 | 
             
            default_executable: kuzushi
         | 
| 14 14 | 
             
            dependencies: 
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency 
         |