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.
-
#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.
-
#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.
-
#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.
-
#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
251 252 253 |
# File 'lib/vanagon/platform/dsl.rb', line 251 def abs_resource_name(resource_name) @platform.abs_resource_name = resource_name end |
#add_build_repository(*args) ⇒ Object
Generic adder for build repositories
387 388 389 |
# File 'lib/vanagon/platform/dsl.rb', line 387 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
360 361 362 363 |
# File 'lib/vanagon/platform/dsl.rb', line 360 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
265 266 267 |
# File 'lib/vanagon/platform/dsl.rb', line 265 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
300 301 302 |
# File 'lib/vanagon/platform/dsl.rb', line 300 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.
293 294 295 |
# File 'lib/vanagon/platform/dsl.rb', line 293 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
279 280 281 |
# File 'lib/vanagon/platform/dsl.rb', line 279 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
286 287 288 |
# File 'lib/vanagon/platform/dsl.rb', line 286 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.
307 308 309 |
# File 'lib/vanagon/platform/dsl.rb', line 307 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
272 273 274 |
# File 'lib/vanagon/platform/dsl.rb', line 272 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)
224 225 226 227 |
# File 'lib/vanagon/platform/dsl.rb', line 224 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)
343 344 345 |
# File 'lib/vanagon/platform/dsl.rb', line 343 def codename(codename) @platform.codename = codename end |
#copy(copy_cmd) ⇒ Object
Set the path to copy for the platform
138 139 140 |
# File 'lib/vanagon/platform/dsl.rb', line 138 def copy(copy_cmd) @platform.copy = copy_cmd end |
#cross_compiled(xcc_flag) ⇒ Object
Set the cross_compiled flag for the platform
145 146 147 |
# File 'lib/vanagon/platform/dsl.rb', line 145 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
208 209 210 |
# File 'lib/vanagon/platform/dsl.rb', line 208 def defaultdir(dir) @platform.defaultdir = dir end |
#dist(dist_string) ⇒ Object
define an explicit Dist for the platform (most likely used for RPM platforms)
152 153 154 |
# File 'lib/vanagon/platform/dsl.rb', line 152 def dist(dist_string) @platform.dist = dist_string end |
#docker_image(image_name) ⇒ Object
Set the name of the docker image to use
258 259 260 |
# File 'lib/vanagon/platform/dsl.rb', line 258 def docker_image(image_name) @platform.docker_image = image_name 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
124 125 126 |
# File 'lib/vanagon/platform/dsl.rb', line 124 def find(find_cmd) @platform.find = find_cmd end |
#install(install_cmd) ⇒ Object
Set the path to the install command
165 166 167 |
# File 'lib/vanagon/platform/dsl.rb', line 165 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
194 195 196 |
# File 'lib/vanagon/platform/dsl.rb', line 194 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 |
#num_cores(num_cores_cmd) ⇒ Object
Sets the command to retrieve the number of cores available on a platform.
179 180 181 |
# File 'lib/vanagon/platform/dsl.rb', line 179 def num_cores(num_cores_cmd) @platform.num_cores = num_cores_cmd end |
#output_dir(directory) ⇒ Object
347 348 349 |
# File 'lib/vanagon/platform/dsl.rb', line 347 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
117 118 119 |
# File 'lib/vanagon/platform/dsl.rb', line 117 def package_type(pkg_type) @platform.package_type = pkg_type end |
#patch(patch_cmd) ⇒ Object
Set the path to patch for the platform
172 173 174 |
# File 'lib/vanagon/platform/dsl.rb', line 172 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)-/ 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
336 337 338 |
# File 'lib/vanagon/platform/dsl.rb', line 336 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
186 187 188 |
# File 'lib/vanagon/platform/dsl.rb', line 186 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
159 160 161 |
# File 'lib/vanagon/platform/dsl.rb', line 159 def rpmbuild(rpmbuild_cmd) @platform.rpmbuild = rpmbuild_cmd end |
#servicedir(dir) ⇒ Object
Set the directory where service files or init scripts live for the platform
201 202 203 |
# File 'lib/vanagon/platform/dsl.rb', line 201 def servicedir(dir) @platform.servicedir = dir end |
#servicetype(type) ⇒ Object
Set the servicetype for the platform so that services can be installed correctly.
215 216 217 |
# File 'lib/vanagon/platform/dsl.rb', line 215 def servicetype(type) @platform.servicetype = type 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
131 132 133 |
# File 'lib/vanagon/platform/dsl.rb', line 131 def sort(sort_cmd) @platform.sort = sort_cmd end |
#source_output_dir(directory) ⇒ Object
351 352 353 |
# File 'lib/vanagon/platform/dsl.rb', line 351 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
314 315 316 |
# File 'lib/vanagon/platform/dsl.rb', line 314 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
328 329 330 |
# File 'lib/vanagon/platform/dsl.rb', line 328 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.
321 322 323 |
# File 'lib/vanagon/platform/dsl.rb', line 321 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
243 244 245 246 |
# File 'lib/vanagon/platform/dsl.rb', line 243 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
235 236 237 |
# File 'lib/vanagon/platform/dsl.rb', line 235 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
369 370 371 372 |
# File 'lib/vanagon/platform/dsl.rb', line 369 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
378 379 380 381 |
# File 'lib/vanagon/platform/dsl.rb', line 378 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 |