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

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 ”



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

def run_list_modifiers
  @run_list_modifiers
end

#run_list_removersObject

Returns the value of attribute run_list_removers.



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

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



79
80
81
82
83
84
85
86
# 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) ⇒ Object



97
98
99
100
101
102
103
104
# 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) ⇒ Object



106
107
108
109
110
111
112
113
# 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) ⇒ Object



50
51
52
53
54
55
56
57
58
59
# 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) ⇒ Object



88
89
90
91
92
93
94
95
# 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) ⇒ 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|
      unless 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



63
64
65
66
67
68
69
70
# 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