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.
-
#brew(brew_cmd) ⇒ Object
Set the path to Homebrew for the platform.
-
#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).
-
#clear_provisioning ⇒ Object
Clears the provisioning commands array.
-
#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.
- #inherit_from_default(name = @name) ⇒ Object
-
#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, override_name: false, &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, servicedir: nil) ⇒ 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.
-
#use_docker_exec(bool) ⇒ Object
Specify whether to use Docker exec instead of SSH to run commands.
-
#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
23 24 25 |
# File 'lib/vanagon/platform/dsl.rb', line 23 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.
79 80 81 82 83 84 85 86 87 88 |
# File 'lib/vanagon/platform/dsl.rb', line 79 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.
68 69 70 |
# File 'lib/vanagon/platform/dsl.rb', line 68 def _platform @platform end |
#abs_resource_name(resource_name) ⇒ Object
Set the name of this platform as always-be-scheduling (ABS) expects it
311 312 313 |
# File 'lib/vanagon/platform/dsl.rb', line 311 def abs_resource_name(resource_name) @platform.abs_resource_name = resource_name end |
#add_build_repository(*args) ⇒ Object
Generic adder for build repositories
465 466 467 |
# File 'lib/vanagon/platform/dsl.rb', line 465 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
438 439 440 441 |
# File 'lib/vanagon/platform/dsl.rb', line 438 def apt_repo(definition, gpg_key = nil) VanagonLogger.info "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
343 344 345 |
# File 'lib/vanagon/platform/dsl.rb', line 343 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
378 379 380 |
# File 'lib/vanagon/platform/dsl.rb', line 378 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.
371 372 373 |
# File 'lib/vanagon/platform/dsl.rb', line 371 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
357 358 359 |
# File 'lib/vanagon/platform/dsl.rb', line 357 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
364 365 366 |
# File 'lib/vanagon/platform/dsl.rb', line 364 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.
385 386 387 |
# File 'lib/vanagon/platform/dsl.rb', line 385 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
350 351 352 |
# File 'lib/vanagon/platform/dsl.rb', line 350 def aws_user_data(userdata) @platform.aws_user_data = userdata end |
#brew(brew_cmd) ⇒ Object
Set the path to Homebrew for the platform
171 172 173 |
# File 'lib/vanagon/platform/dsl.rb', line 171 def brew(brew_cmd) @platform.brew = brew_cmd 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)
284 285 286 287 |
# File 'lib/vanagon/platform/dsl.rb', line 284 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 |
#clear_provisioning ⇒ Object
Clears the provisioning commands array
231 232 233 |
# File 'lib/vanagon/platform/dsl.rb', line 231 def clear_provisioning @platform.provisioning.clear end |
#codename(codename) ⇒ Object
Set any codename this platform may have (debian for example)
421 422 423 |
# File 'lib/vanagon/platform/dsl.rb', line 421 def codename(codename) @platform.codename = codename end |
#copy(copy_cmd) ⇒ Object
Set the path to copy for the platform
164 165 166 |
# File 'lib/vanagon/platform/dsl.rb', line 164 def copy(copy_cmd) @platform.copy = copy_cmd end |
#cross_compiled(xcc_flag) ⇒ Object
Set the cross_compiled flag for the platform
178 179 180 |
# File 'lib/vanagon/platform/dsl.rb', line 178 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
258 259 260 |
# File 'lib/vanagon/platform/dsl.rb', line 258 def defaultdir(dir) @platform.defaultdir = dir end |
#dist(dist_string) ⇒ Object
define an explicit Dist for the platform (most likely used for RPM platforms)
185 186 187 |
# File 'lib/vanagon/platform/dsl.rb', line 185 def dist(dist_string) @platform.dist = dist_string end |
#docker_image(image_name) ⇒ Object
Set the name of the docker image to use
318 319 320 |
# File 'lib/vanagon/platform/dsl.rb', line 318 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
325 326 327 |
# File 'lib/vanagon/platform/dsl.rb', line 325 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
104 105 106 |
# File 'lib/vanagon/platform/dsl.rb', line 104 def environment(key, value) @platform.environment[key] = value end |
#find(find_cmd) ⇒ Object
Set the path to find for the platform
143 144 145 |
# File 'lib/vanagon/platform/dsl.rb', line 143 def find(find_cmd) @platform.find = find_cmd end |
#inherit_from_default(name = @name) ⇒ Object
94 95 96 97 98 99 |
# File 'lib/vanagon/platform/dsl.rb', line 94 def inherit_from_default(name = @name) default_file = File.join(__dir__, 'defaults', "#{name}.rb") default_object = Vanagon::Platform::DSL.new(name) @platform = default_object.instance_eval(File.read(default_file), default_file, 1) end |
#install(install_cmd) ⇒ Object
Set the path to the install command
198 199 200 |
# File 'lib/vanagon/platform/dsl.rb', line 198 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
239 240 241 |
# File 'lib/vanagon/platform/dsl.rb', line 239 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
111 112 113 |
# File 'lib/vanagon/platform/dsl.rb', line 111 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
205 206 207 |
# File 'lib/vanagon/platform/dsl.rb', line 205 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.
219 220 221 |
# File 'lib/vanagon/platform/dsl.rb', line 219 def num_cores(num_cores_cmd) @platform.num_cores = num_cores_cmd end |
#output_dir(directory) ⇒ Object
425 426 427 |
# File 'lib/vanagon/platform/dsl.rb', line 425 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
136 137 138 |
# File 'lib/vanagon/platform/dsl.rb', line 136 def package_type(pkg_type) @platform.package_type = pkg_type end |
#patch(patch_cmd) ⇒ Object
Set the path to patch for the platform
212 213 214 |
# File 'lib/vanagon/platform/dsl.rb', line 212 def patch(patch_cmd) @platform.patch = patch_cmd end |
#platform(platform_name, override_name: false, &block) {|_self| ... } ⇒ Object
Primary way of interacting with the DSL. Also a simple factory to get the right platform object.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/vanagon/platform/dsl.rb', line 32 def platform(platform_name, override_name: false, &block) # By default, the Vanagon::Platform's name/version/arch will be based on # the filename of the platform definition. But if override_name is true, # then use the `platform_name` passed into this method instead. @name = platform_name if override_name @platform = case platform_name when /^aix-/ Vanagon::Platform::RPM::AIX.new(@name) when /^(amazon|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
414 415 416 |
# File 'lib/vanagon/platform/dsl.rb', line 414 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
226 227 228 |
# File 'lib/vanagon/platform/dsl.rb', line 226 def provision_with(command) @platform.provision_with(command) end |
#respond_to_missing?(method_name, include_private = false) ⇒ Boolean
90 91 92 |
# File 'lib/vanagon/platform/dsl.rb', line 90 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
192 193 194 |
# File 'lib/vanagon/platform/dsl.rb', line 192 def rpmbuild(rpmbuild_cmd) @platform.rpmbuild = rpmbuild_cmd end |
#sed(command) ⇒ Object
Set the path to sed for the platform
150 151 152 |
# File 'lib/vanagon/platform/dsl.rb', line 150 def sed(command) @platform.sed = command end |
#servicedir(dir) ⇒ Object
Set the directory where service files or init scripts live for the platform
246 247 248 249 250 251 252 253 |
# File 'lib/vanagon/platform/dsl.rb', line 246 def servicedir(dir) @platform.servicedir = dir # Add to the servicetypes array if we haven't already if @platform.servicetype && @platform.servicedir && @platform.servicetypes.select { |s| s.servicetype == @platform.servicetype }.empty? @platform.servicetypes << OpenStruct.new(:servicetype => @platform.servicetype, :servicedir => @platform.servicedir) end end |
#servicetype(type, servicedir: nil) ⇒ Object
Set the servicetype for the platform so that services can be installed correctly.
266 267 268 269 270 271 272 273 274 275 276 277 |
# File 'lib/vanagon/platform/dsl.rb', line 266 def servicetype(type, servicedir: nil) # rubocop:disable Metrics/AbcSize if servicedir @platform.servicetypes << OpenStruct.new(:servicetype => type, :servicedir => servicedir) else @platform.servicetype = type end # Add to the servicetypes array if we haven't already if @platform.servicetype && @platform.servicedir && @platform.servicetypes.select { |s| s.servicetype == @platform.servicetype }.empty? @platform.servicetypes << OpenStruct.new(:servicetype => @platform.servicetype, :servicedir => @platform.servicedir) end end |
#setting(name, value) ⇒ Object
469 470 471 |
# File 'lib/vanagon/platform/dsl.rb', line 469 def setting(name, value) @platform.settings[name] = value end |
#settings ⇒ Object
473 474 475 |
# File 'lib/vanagon/platform/dsl.rb', line 473 def settings @platform.settings end |
#shasum(sha1sum_command) ⇒ Object
129 130 131 |
# File 'lib/vanagon/platform/dsl.rb', line 129 def shasum(sha1sum_command) @platform.shasum = sha1sum_command end |
#shell(shell_path) ⇒ Object
Set the path for Make’s SHELL for the platform
118 119 120 |
# File 'lib/vanagon/platform/dsl.rb', line 118 def shell(shell_path) @platform.shell = shell_path end |
#sort(sort_cmd) ⇒ Object
Set the path to sort for the platform
157 158 159 |
# File 'lib/vanagon/platform/dsl.rb', line 157 def sort(sort_cmd) @platform.sort = sort_cmd end |
#source_output_dir(directory) ⇒ Object
429 430 431 |
# File 'lib/vanagon/platform/dsl.rb', line 429 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
392 393 394 |
# File 'lib/vanagon/platform/dsl.rb', line 392 def ssh_port(port = 22) @platform.ssh_port = port end |
#tar(tar_cmd) ⇒ Object
Set the path to tar for the platform
125 126 127 |
# File 'lib/vanagon/platform/dsl.rb', line 125 def tar(tar_cmd) @platform.tar = tar_cmd end |
#target_host(target_host) ⇒ Object
Set the target ip address or hostname to start build
406 407 408 |
# File 'lib/vanagon/platform/dsl.rb', line 406 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.
399 400 401 |
# File 'lib/vanagon/platform/dsl.rb', line 399 def target_user(user = "root") @platform.target_user = user end |
#use_docker_exec(bool) ⇒ Object
Specify whether to use Docker exec instead of SSH to run commands
This also causes Vanagon to use ‘docker cp` instead of `rsync` when copying files.
336 337 338 |
# File 'lib/vanagon/platform/dsl.rb', line 336 def use_docker_exec(bool) @platform.use_docker_exec = bool 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
303 304 305 306 |
# File 'lib/vanagon/platform/dsl.rb', line 303 def vcloud_name(cloud_name) VanagonLogger.info "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
295 296 297 |
# File 'lib/vanagon/platform/dsl.rb', line 295 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
447 448 449 450 |
# File 'lib/vanagon/platform/dsl.rb', line 447 def yum_repo(definition) VanagonLogger.info "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
456 457 458 459 |
# File 'lib/vanagon/platform/dsl.rb', line 456 def zypper_repo(definition) VanagonLogger.info "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 |