Class: Vanagon::Platform::DSL
- Inherits:
-
Object
- Object
- Vanagon::Platform::DSL
- Defined in:
- lib/vanagon/platform/dsl.rb
Instance Method Summary collapse
-
#_platform ⇒ Vanagon::Platform
Accessor for the platform.
-
#abs_resource_name(resource_name) ⇒ Object
Set the name of this platform as always-be-scheduling (ABS) expects it.
-
#add_build_repository(*args) ⇒ Object
Generic adder for build repositories.
-
#apt_repo(definition, gpg_key = nil) ⇒ Object
deprecated
Deprecated.
Please use the add_build_repository DSL method instead. apt_repo will be removed in a future vanagon release.
-
#aws_ami(ami_name) ⇒ Object
Set the ami for the platform to use.
-
#aws_instance_type(instance_type = 't1.micro') ⇒ Object
Set the instaince type.
-
#aws_key_name(key_name = 'vanagon') ⇒ Object
Set the key_name used.
-
#aws_region(region = 'us-east-1') ⇒ Object
Set the region, this defaults to us-east-1.
-
#aws_shutdown_behavior(shutdown_behavior = 'terminate') ⇒ Object
Set the shutdown behavior for aws.
-
#aws_subnet_id(subnet_id) ⇒ Object
Set the subnet_id.
-
#aws_user_data(userdata) ⇒ Object
Set the user data used in AWS to do setup.
-
#build_hosts(*args) ⇒ Object
(also: #build_host)
Set the list of possible host to perform a build on (when not using pooler or CLI flags).
-
#codename(codename) ⇒ Object
Set any codename this platform may have (debian for example).
-
#copy(copy_cmd) ⇒ Object
Set the path to copy for the platform.
-
#cross_compiled(xcc_flag) ⇒ Object
Set the cross_compiled flag for the platform.
-
#defaultdir(dir) ⇒ Object
Set the directory where default or sysconfig files live for the platform.
-
#dist(dist_string) ⇒ Object
define an explicit Dist for the platform (most likely used for RPM platforms).
-
#docker_image(image_name) ⇒ Object
Set the name of the docker image to use.
-
#docker_run_args(args) ⇒ Object
Set additional ‘docker run` arguments to pass when creating containers.
-
#environment(key, value) ⇒ Object
Adds an arbitrary environment variable to a Platform, which will be merged with any environment variables defined by the Project into the rendered Makefile.
-
#find(find_cmd) ⇒ Object
Set the path to find for the platform.
-
#initialize(platform_name) ⇒ Vanagon::Platform::DSL
constructor
Constructor for the DSL object.
-
#install(install_cmd) ⇒ Object
Set the path to the install command.
-
#install_build_dependencies_with(command, suffix = nil) ⇒ Object
Set the command to install any needed build dependencies for the target machine.
-
#make(make_cmd) ⇒ Object
Set the path to make for the platform.
-
#method_missing(method_name, *args) ⇒ Object
All purpose getter.
-
#mktemp(command) ⇒ Object
Set the path and options for the mktemp command be used by default.
-
#num_cores(num_cores_cmd) ⇒ Object
Sets the command to retrieve the number of cores available on a platform.
- #output_dir(directory) ⇒ Object
-
#package_type(pkg_type) ⇒ Object
Set the type of package we are going to build for this platform.
-
#patch(patch_cmd) ⇒ Object
Set the path to patch for the platform.
-
#platform(platform_name, &block) {|_self| ... } ⇒ Object
Primary way of interacting with the DSL.
-
#platform_triple(triple) ⇒ Object
Set the platform_triple for the platform.
-
#provision_with(command) ⇒ Object
Set the command to turn the target machine into a builder for vanagon.
- #respond_to_missing?(method_name, include_private = false) ⇒ Boolean
-
#rpmbuild(rpmbuild_cmd) ⇒ Object
Set the path to rpmbuild for the platform.
-
#sed(command) ⇒ Object
Set the path to sed for the platform.
-
#servicedir(dir) ⇒ Object
Set the directory where service files or init scripts live for the platform.
-
#servicetype(type) ⇒ Object
Set the servicetype for the platform so that services can be installed correctly.
- #setting(name, value) ⇒ Object
- #settings ⇒ Object
- #shasum(sha1sum_command) ⇒ Object
-
#shell(shell_path) ⇒ Object
Set the path for Make’s SHELL for the platform.
-
#sort(sort_cmd) ⇒ Object
Set the path to sort for the platform.
- #source_output_dir(directory) ⇒ Object
-
#ssh_port(port = 22) ⇒ Object
Set the port for ssh to use if it’s not 22.
-
#tar(tar_cmd) ⇒ Object
Set the path to tar for the platform.
-
#target_host(target_host) ⇒ Object
Set the target ip address or hostname to start build.
-
#target_user(user = "root") ⇒ Object
Set the target user to login with.
-
#vcloud_name(cloud_name) ⇒ Object
deprecated
Deprecated.
Please use vmpooler_template instead, this will be removed in a future vanagon release.
-
#vmpooler_template(template_name) ⇒ Object
Set the name of this platform as the vm pooler expects it.
-
#yum_repo(definition) ⇒ Object
deprecated
Deprecated.
Please use the add_build_repository DSL method instead. yum_repo will be removed in a future vanagon release.
-
#zypper_repo(definition) ⇒ Object
deprecated
Deprecated.
Please use the add_build_repository DSL method instead. zypper_repo will be removed in a future vanagon release.
Constructor Details
#initialize(platform_name) ⇒ Vanagon::Platform::DSL
Constructor for the DSL object
21 22 23 |
# File 'lib/vanagon/platform/dsl.rb', line 21 def initialize(platform_name) @name = platform_name end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args) ⇒ Object
All purpose getter. This object, which is passed to the platform block, won’t have easy access to the attributes of the @platform, so we make a getter for each attribute.
We only magically handle get_ methods, any other methods just get the standard method_missing treatment.
71 72 73 74 75 76 77 78 79 80 |
# File 'lib/vanagon/platform/dsl.rb', line 71 def method_missing(method_name, *args) attribute_match = method_name.to_s.match(/get_(.*)/) if attribute_match attribute = attribute_match.captures.first else super end @platform.send(attribute) end |
Instance Method Details
#_platform ⇒ Vanagon::Platform
Accessor for the platform.
60 61 62 |
# File 'lib/vanagon/platform/dsl.rb', line 60 def _platform @platform end |
#abs_resource_name(resource_name) ⇒ Object
Set the name of this platform as always-be-scheduling (ABS) expects it
269 270 271 |
# File 'lib/vanagon/platform/dsl.rb', line 269 def abs_resource_name(resource_name) @platform.abs_resource_name = resource_name end |
#add_build_repository(*args) ⇒ Object
Generic adder for build repositories
412 413 414 |
# File 'lib/vanagon/platform/dsl.rb', line 412 def add_build_repository(*args) @platform.add_build_repository(*args) end |
#apt_repo(definition, gpg_key = nil) ⇒ Object
Please use the add_build_repository DSL method instead. apt_repo will be removed in a future vanagon release.
Helper to setup a apt repository on a target system
385 386 387 388 |
# File 'lib/vanagon/platform/dsl.rb', line 385 def apt_repo(definition, gpg_key = nil) warn "Please use the add_build_repository DSL method instead. apt_repo will be removed in a future vanagon release." self.add_build_repository(definition, gpg_key) end |
#aws_ami(ami_name) ⇒ Object
Set the ami for the platform to use
290 291 292 |
# File 'lib/vanagon/platform/dsl.rb', line 290 def aws_ami(ami_name) @platform.aws_ami = ami_name end |
#aws_instance_type(instance_type = 't1.micro') ⇒ Object
Set the instaince type. This defaults to t1.micro which is the free instance
325 326 327 |
# File 'lib/vanagon/platform/dsl.rb', line 325 def aws_instance_type(instance_type = 't1.micro') @platform.aws_instance_type = instance_type end |
#aws_key_name(key_name = 'vanagon') ⇒ Object
Set the key_name used. This should already exist on AWS.
318 319 320 |
# File 'lib/vanagon/platform/dsl.rb', line 318 def aws_key_name(key_name = 'vanagon') @platform.aws_key_name = key_name end |
#aws_region(region = 'us-east-1') ⇒ Object
Set the region, this defaults to us-east-1
304 305 306 |
# File 'lib/vanagon/platform/dsl.rb', line 304 def aws_region(region = 'us-east-1') @platform.aws_region = region end |
#aws_shutdown_behavior(shutdown_behavior = 'terminate') ⇒ Object
Set the shutdown behavior for aws. This will default to terminate the instance on shutdown
311 312 313 |
# File 'lib/vanagon/platform/dsl.rb', line 311 def aws_shutdown_behavior(shutdown_behavior = 'terminate') @platform.aws_shutdown_behavior = shutdown_behavior end |
#aws_subnet_id(subnet_id) ⇒ Object
Set the subnet_id. Use this to setup a subnet for your VPC to use.
332 333 334 |
# File 'lib/vanagon/platform/dsl.rb', line 332 def aws_subnet_id(subnet_id) @platform.aws_subnet_id = subnet_id end |
#aws_user_data(userdata) ⇒ Object
Set the user data used in AWS to do setup. Like cloud-config
297 298 299 |
# File 'lib/vanagon/platform/dsl.rb', line 297 def aws_user_data(userdata) @platform.aws_user_data = userdata end |
#build_hosts(*args) ⇒ Object Also known as: build_host
Set the list of possible host to perform a build on (when not using pooler or CLI flags)
242 243 244 245 |
# File 'lib/vanagon/platform/dsl.rb', line 242 def build_hosts(*args) raise ArgumentError, "build_hosts requires at least one host to be a build target." if args.empty? @platform.build_hosts = Array(args).flatten end |
#codename(codename) ⇒ Object
Set any codename this platform may have (debian for example)
368 369 370 |
# File 'lib/vanagon/platform/dsl.rb', line 368 def codename(codename) @platform.codename = codename end |
#copy(copy_cmd) ⇒ Object
Set the path to copy for the platform
149 150 151 |
# File 'lib/vanagon/platform/dsl.rb', line 149 def copy(copy_cmd) @platform.copy = copy_cmd end |
#cross_compiled(xcc_flag) ⇒ Object
Set the cross_compiled flag for the platform
156 157 158 |
# File 'lib/vanagon/platform/dsl.rb', line 156 def cross_compiled(xcc_flag) @platform.cross_compiled = !!xcc_flag end |
#defaultdir(dir) ⇒ Object
Set the directory where default or sysconfig files live for the platform
226 227 228 |
# File 'lib/vanagon/platform/dsl.rb', line 226 def defaultdir(dir) @platform.defaultdir = dir end |
#dist(dist_string) ⇒ Object
define an explicit Dist for the platform (most likely used for RPM platforms)
163 164 165 |
# File 'lib/vanagon/platform/dsl.rb', line 163 def dist(dist_string) @platform.dist = dist_string end |
#docker_image(image_name) ⇒ Object
Set the name of the docker image to use
276 277 278 |
# File 'lib/vanagon/platform/dsl.rb', line 276 def docker_image(image_name) @platform.docker_image = image_name end |
#docker_run_args(args) ⇒ Object
Set additional ‘docker run` arguments to pass when creating containers
283 284 285 |
# File 'lib/vanagon/platform/dsl.rb', line 283 def docker_run_args(args) @platform.docker_run_args = Array(args) end |
#environment(key, value) ⇒ Object
Adds an arbitrary environment variable to a Platform, which will be merged with any environment variables defined by the Project into the rendered Makefile
89 90 91 |
# File 'lib/vanagon/platform/dsl.rb', line 89 def environment(key, value) @platform.environment[key] = value end |
#find(find_cmd) ⇒ Object
Set the path to find for the platform
128 129 130 |
# File 'lib/vanagon/platform/dsl.rb', line 128 def find(find_cmd) @platform.find = find_cmd end |
#install(install_cmd) ⇒ Object
Set the path to the install command
176 177 178 |
# File 'lib/vanagon/platform/dsl.rb', line 176 def install(install_cmd) @platform.install = install_cmd end |
#install_build_dependencies_with(command, suffix = nil) ⇒ Object
Set the command to install any needed build dependencies for the target machine
212 213 214 |
# File 'lib/vanagon/platform/dsl.rb', line 212 def install_build_dependencies_with(command, suffix = nil) @platform.build_dependencies = OpenStruct.new({ :command => command, :suffix => suffix }) end |
#make(make_cmd) ⇒ Object
Set the path to make for the platform
96 97 98 |
# File 'lib/vanagon/platform/dsl.rb', line 96 def make(make_cmd) @platform.make = make_cmd end |
#mktemp(command) ⇒ Object
Set the path and options for the mktemp command be used by default
183 184 185 |
# File 'lib/vanagon/platform/dsl.rb', line 183 def mktemp(command) @platform.mktemp = command end |
#num_cores(num_cores_cmd) ⇒ Object
Sets the command to retrieve the number of cores available on a platform.
197 198 199 |
# File 'lib/vanagon/platform/dsl.rb', line 197 def num_cores(num_cores_cmd) @platform.num_cores = num_cores_cmd end |
#output_dir(directory) ⇒ Object
372 373 374 |
# File 'lib/vanagon/platform/dsl.rb', line 372 def output_dir(directory) @platform.output_dir = directory end |
#package_type(pkg_type) ⇒ Object
Set the type of package we are going to build for this platform
121 122 123 |
# File 'lib/vanagon/platform/dsl.rb', line 121 def package_type(pkg_type) @platform.package_type = pkg_type end |
#patch(patch_cmd) ⇒ Object
Set the path to patch for the platform
190 191 192 |
# File 'lib/vanagon/platform/dsl.rb', line 190 def patch(patch_cmd) @platform.patch = patch_cmd end |
#platform(platform_name, &block) {|_self| ... } ⇒ Object
Primary way of interacting with the DSL. Also a simple factory to get the right platform object.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/vanagon/platform/dsl.rb', line 29 def platform(platform_name, &block) @platform = case platform_name when /^aix-/ Vanagon::Platform::RPM::AIX.new(@name) when /^(cisco-wrlinux|el|fedora|redhat|redhatfips)-/ Vanagon::Platform::RPM.new(@name) when /^sles-/ Vanagon::Platform::RPM::SLES.new(@name) when /^(cumulus|debian|huaweios|ubuntu)-/ Vanagon::Platform::DEB.new(@name) when /^eos-/ Vanagon::Platform::RPM::EOS.new(@name) when /^osx-/ Vanagon::Platform::OSX.new(@name) when /^solaris-10/ Vanagon::Platform::Solaris10.new(@name) when /^solaris-11/ Vanagon::Platform::Solaris11.new(@name) when /^windows/ Vanagon::Platform::Windows.new(@name) else fail "Platform not implemented for '#{@name}' yet. Please go do so..." end yield(self) @platform end |
#platform_triple(triple) ⇒ Object
Set the platform_triple for the platform
tools and cross-compilation
361 362 363 |
# File 'lib/vanagon/platform/dsl.rb', line 361 def platform_triple(triple) @platform.platform_triple = triple end |
#provision_with(command) ⇒ Object
Set the command to turn the target machine into a builder for vanagon
204 205 206 |
# File 'lib/vanagon/platform/dsl.rb', line 204 def provision_with(command) @platform.provision_with(command) end |
#respond_to_missing?(method_name, include_private = false) ⇒ Boolean
82 83 84 |
# File 'lib/vanagon/platform/dsl.rb', line 82 def respond_to_missing?(method_name, include_private = false) method_name.to_s.start_with?('get_') || super end |
#rpmbuild(rpmbuild_cmd) ⇒ Object
Set the path to rpmbuild for the platform
170 171 172 |
# File 'lib/vanagon/platform/dsl.rb', line 170 def rpmbuild(rpmbuild_cmd) @platform.rpmbuild = rpmbuild_cmd end |
#sed(command) ⇒ Object
Set the path to sed for the platform
135 136 137 |
# File 'lib/vanagon/platform/dsl.rb', line 135 def sed(command) @platform.sed = command end |
#servicedir(dir) ⇒ Object
Set the directory where service files or init scripts live for the platform
219 220 221 |
# File 'lib/vanagon/platform/dsl.rb', line 219 def servicedir(dir) @platform.servicedir = dir end |
#servicetype(type) ⇒ Object
Set the servicetype for the platform so that services can be installed correctly.
233 234 235 |
# File 'lib/vanagon/platform/dsl.rb', line 233 def servicetype(type) @platform.servicetype = type end |
#setting(name, value) ⇒ Object
416 417 418 |
# File 'lib/vanagon/platform/dsl.rb', line 416 def setting(name, value) @platform.settings[name] = value end |
#settings ⇒ Object
420 421 422 |
# File 'lib/vanagon/platform/dsl.rb', line 420 def settings @platform.settings end |
#shasum(sha1sum_command) ⇒ Object
114 115 116 |
# File 'lib/vanagon/platform/dsl.rb', line 114 def shasum(sha1sum_command) @platform.shasum = sha1sum_command end |
#shell(shell_path) ⇒ Object
Set the path for Make’s SHELL for the platform
103 104 105 |
# File 'lib/vanagon/platform/dsl.rb', line 103 def shell(shell_path) @platform.shell = shell_path end |
#sort(sort_cmd) ⇒ Object
Set the path to sort for the platform
142 143 144 |
# File 'lib/vanagon/platform/dsl.rb', line 142 def sort(sort_cmd) @platform.sort = sort_cmd end |
#source_output_dir(directory) ⇒ Object
376 377 378 |
# File 'lib/vanagon/platform/dsl.rb', line 376 def source_output_dir(directory) @platform.source_output_dir = directory end |
#ssh_port(port = 22) ⇒ Object
Set the port for ssh to use if it’s not 22
339 340 341 |
# File 'lib/vanagon/platform/dsl.rb', line 339 def ssh_port(port = 22) @platform.ssh_port = port end |
#tar(tar_cmd) ⇒ Object
Set the path to tar for the platform
110 111 112 |
# File 'lib/vanagon/platform/dsl.rb', line 110 def tar(tar_cmd) @platform.tar = tar_cmd end |
#target_host(target_host) ⇒ Object
Set the target ip address or hostname to start build
353 354 355 |
# File 'lib/vanagon/platform/dsl.rb', line 353 def target_host(target_host) @platform.target_host = target_host end |
#target_user(user = "root") ⇒ Object
Set the target user to login with. Defaults to root.
346 347 348 |
# File 'lib/vanagon/platform/dsl.rb', line 346 def target_user(user = "root") @platform.target_user = user end |
#vcloud_name(cloud_name) ⇒ Object
Please use vmpooler_template instead, this will be removed in a future vanagon release.
Set the name of this platform as the vm pooler expects it
261 262 263 264 |
# File 'lib/vanagon/platform/dsl.rb', line 261 def vcloud_name(cloud_name) warn "vcloud_name is a deprecated platform DSL method, and will be removed in a future vanagon release. Please use vmpooler_template instead." self.vmpooler_template(cloud_name) end |
#vmpooler_template(template_name) ⇒ Object
Set the name of this platform as the vm pooler expects it
253 254 255 |
# File 'lib/vanagon/platform/dsl.rb', line 253 def vmpooler_template(template_name) @platform.vmpooler_template = template_name end |
#yum_repo(definition) ⇒ Object
Please use the add_build_repository DSL method instead. yum_repo will be removed in a future vanagon release.
Helper to setup a yum repository on a target system
394 395 396 397 |
# File 'lib/vanagon/platform/dsl.rb', line 394 def yum_repo(definition) warn "Please use the add_build_repository DSL method instead. yum_repo will be removed in a future vanagon release." self.add_build_repository(definition) end |
#zypper_repo(definition) ⇒ Object
Please use the add_build_repository DSL method instead. zypper_repo will be removed in a future vanagon release.
Helper to setup a zypper repository on a target system
403 404 405 406 |
# File 'lib/vanagon/platform/dsl.rb', line 403 def zypper_repo(definition) warn "Please use the add_build_repository DSL method instead. zypper_repo will be removed in a future vanagon release." self.add_build_repository(definition) end |