Class: Vanagon::Platform::DSL

Inherits:
Object
  • Object
show all
Defined in:
lib/vanagon/platform/dsl.rb

Instance Method Summary collapse

Constructor Details

#initialize(platform_name) ⇒ Vanagon::Platform::DSL

Constructor for the DSL object

Parameters:

  • name (String)

    name of the platform



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

#_platformVanagon::Platform

Accessor for the platform.

Returns:



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

Parameters:

  • name (String)

    name of the platform to request from always-be-scheduling



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

Parameters:

  • *args (Array<String>)

    List of arguments to pass on to the platform specific method

Raises:

  • (Vanagon::Error)

    an arror is raised if the current platform does not define add_repository



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

Deprecated.

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

Parameters:

  • definition (String)

    the repo setup file, must be a valid uri, fetched with curl

  • gpg_key (String) (defaults to: nil)

    optional gpg key to be fetched via curl and installed



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

Parameters:

  • ami (String)

    the ami id used.



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

Parameters:

  • instance_type (String) (defaults to: 't1.micro')

    a string to define the instaince type



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.

Parameters:

  • key_name (String) (defaults to: 'vanagon')

    this defaults to the keyname vanagon. Can be set to any



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

Parameters:

  • region (String) (defaults to: 'us-east-1')

    a string used to setup the region



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

Parameters:

  • shutdown_behavior (String) (defaults to: 'terminate')

    a string used to set the shutdown behavior



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.

Parameters:

  • subnet_id (String)

    a string to define the subnet_id in AWS



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

Parameters:

  • userdata (String)

    a string used to send to the node to do the intial setup



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)

Parameters:

  • type (Array)

    the names of the hosts (must be resolvable)

Raises:

  • (ArgumentError)


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)

Parameters:

  • codename (String)

    codename for this platform (squeeze 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

Parameters:

  • copy_cmd (String)

    Full path to the copy command 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

Parameters:

  • xcc (Boolean)

    True if this is a cross-compiled 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

Parameters:

  • dir (String)

    Directory where default or sysconfig files live on 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)

Parameters:

  • dist_string (String)

    the value to use for .dist when building RPMs



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

Parameters:

  • name (String)

    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

Parameters:

  • args (Array<String>)

    array of CLI arguments for ‘docker run`



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

Parameters:

  • find_cmd (String)

    Full path to the find command 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

Parameters:

  • install_cmd (String)

    Full path to install with arguments to be used by default



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

Parameters:

  • command (String)

    Command to install build dependencies for the target machine

  • suffix (String) (defaults to: nil)

    shell to be run after the main command



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

Parameters:

  • make_cmd (String)

    Full path to the make command 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

Parameters:

  • command (String)

    Full path (if needed) for the mktemp command with arguments to



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.

Parameters:

  • num_cores_cmd (String)

    the command to retrieve the number of available cores 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

Parameters:

  • pkg_type (String)

    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

Parameters:

  • patch_cmd (String)

    Full path to the patch command 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.

Parameters:

  • name (String)

    name of the platform

  • block (Proc)

    DSL definition of the platform to call

Yields:

  • (_self)

Yield Parameters:



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

Parameters:

  • triple (String)

    platform_triple for use in building out compiled



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

Parameters:

  • command (String)

    Command to enable the target machine to build packages for the platform



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

Returns:

  • (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

Parameters:

  • rpmbuild_cmd (String)

    Full path to rpmbuild with arguments to be used by default



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

Parameters:

  • command (String)

    full path to the sed command 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

Parameters:

  • dir (String)

    Directory where service files live on 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.

Parameters:

  • type (String)

    service type for the platform (‘sysv’ for example)



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

#settingsObject



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

Parameters:

  • shell_path (String)

    Full path to the shell Make should use



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

Parameters:

  • sort_cmd (String)

    Full path to the sort command 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

Parameters:

  • port (Integer) (defaults to: 22)

    port number for ssh



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

Parameters:

  • tar (String)

    Full path to the tar command 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

Parameters:

  • target_host (String)

    a host string to login with.



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.

Parameters:

  • user (String) (defaults to: "root")

    a user string to login with.



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

Deprecated.

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

Parameters:

  • name (String)

    name that the pooler uses for this platform



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

Parameters:

  • name (String)

    name of the target template to use from the vmpooler



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

Deprecated.

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

Parameters:

  • definition (String)

    the repo setup URI or RPM file



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

Deprecated.

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

Parameters:

  • definition (String)

    the repo setup URI or RPM file



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