Module: Cheffish::NodeProperties

Includes:
BaseProperties
Included in:
Chef::Resource::ChefNode
Defined in:
lib/cheffish/node_properties.rb

Constant Summary

Constants included from BaseProperties

BaseProperties::ArrayType, BaseProperties::Boolean

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#attribute_modifiersObject

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



24
25
26
# File 'lib/cheffish/node_properties.rb', line 24

def attribute_modifiers
  @attribute_modifiers
end

#run_list_modifiersObject

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 ”



76
77
78
# File 'lib/cheffish/node_properties.rb', line 76

def run_list_modifiers
  @run_list_modifiers
end

#run_list_removersObject

Returns the value of attribute run_list_removers.



77
78
79
# File 'lib/cheffish/node_properties.rb', line 77

def run_list_removers
  @run_list_removers
end

Instance Method Details

#attribute(attribute_path, value = Chef::NOT_PASSED, &block) ⇒ Object



25
26
27
28
29
30
31
32
33
34
# 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

#initialize(*args) ⇒ Object

Grab environment from with_environment



8
9
10
11
# File 'lib/cheffish/node_properties.rb', line 8

def initialize(*args)
  super
  chef_environment run_context.cheffish.current_environment
end

#recipe(*recipes) ⇒ Object



78
79
80
81
82
83
84
# File 'lib/cheffish/node_properties.rb', line 78

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) ⇒ Object



92
93
94
95
96
97
98
# File 'lib/cheffish/node_properties.rb', line 92

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) ⇒ Object



99
100
101
102
103
104
105
# File 'lib/cheffish/node_properties.rb', line 99

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) ⇒ Object



49
50
51
52
53
54
55
56
57
58
# File 'lib/cheffish/node_properties.rb', line 49

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) ⇒ Object



85
86
87
88
89
90
91
# File 'lib/cheffish/node_properties.rb', line 85

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) ⇒ Object

Patchy tags tag ‘webserver’, ‘apache’, ‘myenvironment’



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/cheffish/node_properties.rb', line 38

def tag(*tags)
  attribute 'tags' do |existing_tags|
    existing_tags ||= []
    tags.each do |tag|
      if !existing_tags.include?(tag.to_s)
        existing_tags << tag.to_s
      end
    end
    existing_tags
  end
end

#tags(*tags) ⇒ Object

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



62
63
64
65
66
67
68
69
# File 'lib/cheffish/node_properties.rb', line 62

def tags(*tags)
  if tags.size == 0
    attribute('tags')
  else
    tags = tags[0] if tags.size == 1 && tags[0].kind_of?(Array)
    attribute 'tags', tags.map { |tag| tag.to_s }
  end
end