summaryrefslogtreecommitdiff
path: root/DOC_CHANGES.md
blob: 46712f114c7b88ffce025306dd62cefcad37ab10 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<!---
This file is reset every time a new release is done. This file describes changes that have not yet been released.

Example Doc Change:
### Headline for the required change
Description of the required change.
-->

### Resources now *all* get automatic DSL

When you declare a resource (no matter where) you now get automatic DSL for it, based on your class name:

```ruby
module MyModule
  class MyResource < Chef::Resource
    # Names the resource "my_resource"
  end
end
```

When this happens, the resource can be used in a recipe:

```ruby
my_resource 'blah' do
end
```

If you have an abstract class that should *not* have DSL, set `resource_name` to `nil`:

```ruby
module MyModule
  # This will not have DSL
  class MyBaseResource < Chef::Resource
    resource_name nil
  end
  # This will have DSL `my_resource`
  class MyResource < MyBaseResource
  end
end
```

When you do this, `my_base_resource` will not work in a recipe (but `my_resource` will).

You can still use `provides` to provide other DSL names:

```ruby
module MyModule
  class MyResource < Chef::Resource
    provides :super_resource
  end
end
```

Which enables this recipe:

```ruby
super_resource 'wowzers' do  
end
```

(Note that when you use provides in this manner, resource_name will be `my_resource` and declared_type will be `super_resource`. This won't affect most people, but it is worth noting as a matter of explanation.)

Users are encouraged to declare resources in their own namespaces instead of putting them in the `Chef::Resource` namespace.

### Resources may now use `allowed_actions` and `default_action`

Instead of overriding `Chef::Resource.initialize` and setting `@allowed_actions` and `@action` in the constructor, you may now use the `allowed_actions` and `default_action` DSL to declare them:

```ruby
class MyResource < Chef::Resource
  allowed_actions :create, :delete
  default_action :create
end
```

### LWRPs are no longer automatically placed in the `Chef::Resource` namespace

Starting with Chef 12.4.0, accessing an LWRP class by name from the `Chef::Resource` namespace will trigger a deprecation warning message. This means that if your cookbook includes the LWRP `mycookbook/resources/myresource.rb`, you will no longer be able to extend or reference `Chef::Resource::MycookbookMyresource` in Ruby code.  LWRP recipe DSL does not change: the LWRP will still be available to recipes as `mycookbook_myresource`.

You can still get the LWRP class by calling `Chef::ResourceResolver.resolve(:mycookbook_myresource)`.

The primary aim here is clearing out the `Chef::Resource` namespace.

References to these classes is deprecated (and will emit a warning) in Chef 12, and will be removed in Chef 13.