module Cheffish::NodeProperties

Attributes

attribute_modifiers[RW]

attribute 'ip_address', '127.0.0.1' attribute [ 'pushy', 'port' ], '9000' attribute 'ip_addresses' do |existing_value|

(existing_value || []) + [ '127.0.0.1' ]

end attribute 'ip_address', :delete

run_list_modifiers[RW]

Order matters–if two things here are in the wrong order, they will be flipped in the run list recipe 'apache', 'mysql' recipe 'recipe@version' recipe 'recipe' role ''

run_list_removers[RW]

Public Class Methods

new(*args) click to toggle source

Grab environment from with_environment

Calls superclass method Cheffish::BaseProperties::new
# File lib/cheffish/node_properties.rb, line 8
def initialize(*args)
  super
  chef_environment run_context.cheffish.current_environment
end

Public Instance Methods

attribute(attribute_path, value = Chef::NOT_PASSED, &block) click to toggle source
# File lib/cheffish/node_properties.rb, line 25
def attribute(attribute_path, value = Chef::NOT_PASSED, &block)
  @attribute_modifiers ||= []
  if value != Chef::NOT_PASSED
    @attribute_modifiers << [ attribute_path, value ]
  elsif block
    @attribute_modifiers << [ attribute_path, block ]
  else
    raise "attribute requires either a value or a block"
  end
end
recipe(*recipes) click to toggle source
# File lib/cheffish/node_properties.rb, line 79
def recipe(*recipes)
  if recipes.size == 0
    raise ArgumentError, "At least one recipe must be specified"
  end

  @run_list_modifiers ||= []
  @run_list_modifiers += recipes.map { |recipe| Chef::RunList::RunListItem.new("recipe[#{recipe}]") }
end
remove_recipe(*recipes) click to toggle source
# File lib/cheffish/node_properties.rb, line 97
def remove_recipe(*recipes)
  if recipes.size == 0
    raise ArgumentError, "At least one recipe must be specified"
  end

  @run_list_removers ||= []
  @run_list_removers += recipes.map { |recipe| Chef::RunList::RunListItem.new("recipe[#{recipe}]") }
end
remove_role(*roles) click to toggle source
# File lib/cheffish/node_properties.rb, line 106
def remove_role(*roles)
  if roles.size == 0
    raise ArgumentError, "At least one role must be specified"
  end

  @run_list_removers ||= []
  @run_list_removers += roles.map { |role| Chef::RunList::RunListItem.new("role[#{role}]") }
end
remove_tag(*tags) click to toggle source
# File lib/cheffish/node_properties.rb, line 50
def remove_tag(*tags)
  attribute "tags" do |existing_tags|
    if existing_tags
      tags.each do |tag|
        existing_tags.delete(tag.to_s)
      end
    end
    existing_tags
  end
end
role(*roles) click to toggle source
# File lib/cheffish/node_properties.rb, line 88
def role(*roles)
  if roles.size == 0
    raise ArgumentError, "At least one role must be specified"
  end

  @run_list_modifiers ||= []
  @run_list_modifiers += roles.map { |role| Chef::RunList::RunListItem.new("role[#{role}]") }
end
tag(*tags) click to toggle source

Patchy tags tag 'webserver', 'apache', 'myenvironment'

# File lib/cheffish/node_properties.rb, line 38
def tag(*tags)
  attribute "tags" do |existing_tags|
    existing_tags ||= []
    tags.each do |tag|
      unless existing_tags.include?(tag.to_s)
        existing_tags << tag.to_s
      end
    end
    existing_tags
  end
end
tags(*tags) click to toggle source

NON-patchy tags tags :a, :b, :c # removes all other tags

# File lib/cheffish/node_properties.rb, line 63
def tags(*tags)
  if tags.size == 0
    attribute("tags")
  else
    tags = tags[0] if tags.size == 1 && tags[0].is_a?(Array)
    attribute("tags", tags.map(&:to_s))
  end
end