Skip to content

Commit eeee46c

Browse files
committed
v0.1.5: Vagrant & Berkshelf
1 parent 605b498 commit eeee46c

File tree

13 files changed

+314
-9
lines changed

13 files changed

+314
-9
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/.vagrant

Berksfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
source "https://api.berkshelf.com"
2+
3+
metadata

Berksfile.lock

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
DEPENDENCIES
2+
cloudflare
3+
path: .
4+
metadata: true
5+
6+
GRAPH
7+
cloudflare (0.1.4)

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
This file is used to list changes made in each version of cloudflare.
44

5+
## 0.1.5:
6+
7+
* Included Vagrant & Berkshelf for easier development
8+
59
## 0.1.4:
610

711
* Fixed a bug when there were too many records to be loaded in one call from CloudFlare

Gemfile

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
source 'https://rubygems.org'
2+
3+
gem 'berkshelf'
4+
5+
# Uncomment these lines if you want to live on the Edge:
6+
#
7+
# group :development do
8+
# gem "berkshelf", github: "berkshelf/berkshelf"
9+
# gem "vagrant", github: "mitchellh/vagrant", tag: "v1.5.2"
10+
# end
11+
#
12+
# group :plugins do
13+
# gem "vagrant-berkshelf", github: "berkshelf/vagrant-berkshelf"
14+
# gem "vagrant-omnibus", github: "schisamo/vagrant-omnibus"
15+
# end
16+
17+
gem 'test-kitchen'
18+
gem 'kitchen-vagrant'

Gemfile.lock

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
GEM
2+
remote: https://rubygems.org/
3+
specs:
4+
addressable (2.3.6)
5+
berkshelf (3.1.3)
6+
addressable (~> 2.3.4)
7+
berkshelf-api-client (~> 1.2)
8+
buff-config (~> 1.0)
9+
buff-extensions (~> 1.0)
10+
buff-shell_out (~> 0.1)
11+
celluloid (~> 0.16.0.pre)
12+
celluloid-io (~> 0.16.0.pre)
13+
faraday (~> 0.9.0)
14+
minitar (~> 0.5.4)
15+
octokit (~> 3.0)
16+
retryable (~> 1.3.3)
17+
ridley (~> 4.0)
18+
solve (~> 1.1)
19+
thor (~> 0.18)
20+
berkshelf-api-client (1.2.0)
21+
faraday (~> 0.9.0)
22+
buff-config (1.0.0)
23+
buff-extensions (~> 1.0)
24+
varia_model (~> 0.4)
25+
buff-extensions (1.0.0)
26+
buff-ignore (1.1.1)
27+
buff-ruby_engine (0.1.0)
28+
buff-shell_out (0.1.1)
29+
buff-ruby_engine (~> 0.1.0)
30+
celluloid (0.16.0.pre2)
31+
timers (~> 3.0.0)
32+
celluloid-io (0.16.0.pre2)
33+
celluloid (>= 0.16.0.pre)
34+
nio4r (>= 1.0.0)
35+
dep-selector-libgecode (1.0.2)
36+
dep_selector (1.0.3)
37+
dep-selector-libgecode (~> 1.0)
38+
ffi (~> 1.9)
39+
erubis (2.7.0)
40+
faraday (0.9.0)
41+
multipart-post (>= 1.2, < 3)
42+
ffi (1.9.3)
43+
hashie (2.1.2)
44+
hitimes (1.2.1)
45+
json (1.8.1)
46+
kitchen-vagrant (0.15.0)
47+
test-kitchen (~> 1.0)
48+
minitar (0.5.4)
49+
mixlib-authentication (1.3.0)
50+
mixlib-log
51+
mixlib-log (1.6.0)
52+
mixlib-shellout (1.4.0)
53+
multipart-post (2.0.0)
54+
net-http-persistent (2.9.4)
55+
net-scp (1.2.1)
56+
net-ssh (>= 2.6.5)
57+
net-ssh (2.9.1)
58+
nio4r (1.0.0)
59+
octokit (3.2.0)
60+
sawyer (~> 0.5.3)
61+
retryable (1.3.5)
62+
ridley (4.0.0)
63+
addressable
64+
buff-config (~> 1.0)
65+
buff-extensions (~> 1.0)
66+
buff-ignore (~> 1.1)
67+
buff-shell_out (~> 0.1)
68+
celluloid (~> 0.16.0.pre)
69+
celluloid-io (~> 0.16.0.pre)
70+
erubis
71+
faraday (~> 0.9.0)
72+
hashie (>= 2.0.2, < 3.0.0)
73+
json (>= 1.7.7)
74+
mixlib-authentication (>= 1.3.0)
75+
net-http-persistent (>= 2.8)
76+
retryable
77+
semverse (~> 1.1)
78+
varia_model (~> 0.4)
79+
safe_yaml (1.0.3)
80+
sawyer (0.5.4)
81+
addressable (~> 2.3.5)
82+
faraday (~> 0.8, < 0.10)
83+
semverse (1.1.0)
84+
solve (1.2.0)
85+
dep_selector (~> 1.0)
86+
semverse (~> 1.1)
87+
test-kitchen (1.2.1)
88+
mixlib-shellout (~> 1.2)
89+
net-scp (~> 1.1)
90+
net-ssh (~> 2.7)
91+
safe_yaml (~> 1.0)
92+
thor (~> 0.18)
93+
thor (0.19.1)
94+
timers (3.0.1)
95+
hitimes
96+
varia_model (0.4.0)
97+
buff-extensions (~> 1.0)
98+
hashie (>= 2.0.2, < 3.0.0)
99+
100+
PLATFORMS
101+
ruby
102+
103+
DEPENDENCIES
104+
berkshelf
105+
kitchen-vagrant
106+
test-kitchen

README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,30 @@ Another example:
6262

6363
would delete the `server_name.example.com` record from your Cloudflare account.
6464

65+
Example recipe
66+
==============
67+
68+
You can have a look at the `cloudflare::example` recipe for examples on how to use the LWRPs.
69+
70+
You can also test my cookbook with Vagrant (see the 'Vagrant' section below).
71+
72+
Vagrant
73+
=======
74+
75+
You can test this cookbook locally, provided you have a bunch of free software installed, namely [Vagrant](https://www.vagrantup.com/downloads), [Berkshelf](http://berkshelf.com/), [VirtualBox](https://www.virtualbox.org/), and a couple of Vagrant plugins: [Vagrant-Berkshelf](https://github.com/berkshelf/vagrant-berkshelf) and [Vagrant-Omnibus](https://github.com/schisamo/vagrant-omnibus).
76+
77+
You also need to define 3 environment variables to be able to use my Vagrantfile:
78+
79+
* `CLOUDFLARE_EMAIL`
80+
* `CLOUDFLARE_API_KEY`
81+
* `CLOUDFLARE_DOMAIN`
82+
83+
You can do so by typing e.g. `export CLOUDFLARE_EMAIL='[email protected]'` and so on in your shell.
84+
85+
Be aware that the example recipe will then proceed to create a few DNS records on that DNS zone with your credentials, so use with caution!
86+
87+
Then playing with this cookbook should be as easy as running `bundle install && vagrant up`!
88+
6589
Contributing & Feedback
6690
=======================
6791

@@ -71,6 +95,9 @@ Feel free to reach me at <[email protected]>
7195
Changes
7296
=======
7397

98+
* 0.1.5 (Jul 8, 2014)
99+
* Included Vagrant & Berkshelf for easier development
100+
74101
* 0.1.4 (Apr 23, 2014)
75102
* Fixed a bug when there were too many records to be loaded in one call from CloudFlare
76103
* Made it more compliant with ill-formatted record names

Vagrantfile

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# -*- mode: ruby -*-
2+
# vi: set ft=ruby :
3+
4+
CLOUDFLARE_EMAIL = ENV['CLOUDFLARE_EMAIL']
5+
CLOUDFLARE_API_KEY = ENV['CLOUDFLARE_API_KEY']
6+
CLOUDFLARE_ZONE = ENV['CLOUDFLARE_DOMAIN']
7+
8+
if !CLOUDFLARE_EMAIL || !CLOUDFLARE_API_KEY || !CLOUDFLARE_ZONE
9+
raise 'You must define the CLOUDFLARE_EMAIL, CLOUDFLARE_API_KEY and CLOUDFLARE_ZONE environment variables'
10+
end
11+
12+
VAGRANTFILE_API_VERSION = '2'
13+
14+
Vagrant.require_version '>= 1.5.0'
15+
16+
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
17+
config.vm.hostname = 'cloudflare-berkshelf'
18+
config.omnibus.chef_version = '11.6.0'
19+
config.vm.box = 'opscode_ubuntu-12.04_provisionerless'
20+
config.vm.box_url = 'https://opscode-vm-bento.s3.amazonaws.com/vagrant/opscode_ubuntu-12.04_provisionerless.box'
21+
22+
config.berkshelf.enabled = true
23+
24+
config.vm.provision :chef_solo do |chef|
25+
chef.json = {
26+
'cloudflare' => {
27+
'credentials' => {
28+
'email' => CLOUDFLARE_EMAIL,
29+
'api_key' => CLOUDFLARE_API_KEY
30+
},
31+
'example_zone' => CLOUDFLARE_ZONE
32+
}
33+
}
34+
35+
chef.run_list = [
36+
'recipe[cloudflare::example]',
37+
]
38+
end
39+
end

chefignore

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# Put files/directories that should be ignored in this file when uploading
2+
# or sharing to the community site.
3+
# Lines that start with '# ' are comments.
4+
5+
# OS generated files #
6+
######################
7+
.DS_Store
8+
Icon?
9+
nohup.out
10+
ehthumbs.db
11+
Thumbs.db
12+
13+
# SASS #
14+
########
15+
.sass-cache
16+
17+
# EDITORS #
18+
###########
19+
\#*
20+
.#*
21+
*~
22+
*.sw[a-z]
23+
*.bak
24+
REVISION
25+
TAGS*
26+
tmtags
27+
*_flymake.*
28+
*_flymake
29+
*.tmproj
30+
.project
31+
.settings
32+
mkmf.log
33+
34+
## COMPILED ##
35+
##############
36+
a.out
37+
*.o
38+
*.pyc
39+
*.so
40+
*.com
41+
*.class
42+
*.dll
43+
*.exe
44+
*/rdoc/
45+
46+
# Testing #
47+
###########
48+
.watchr
49+
.rspec
50+
spec/*
51+
spec/fixtures/*
52+
test/*
53+
features/*
54+
Guardfile
55+
Procfile
56+
57+
# SCM #
58+
#######
59+
.git
60+
*/.git
61+
.gitignore
62+
.gitmodules
63+
.gitconfig
64+
.gitattributes
65+
.svn
66+
*/.bzr/*
67+
*/.hg/*
68+
*/.svn/*
69+
70+
# Berkshelf #
71+
#############
72+
cookbooks/*
73+
tmp
74+
75+
# Cookbooks #
76+
#############
77+
CONTRIBUTING
78+
CHANGELOG*
79+
80+
# Strainer #
81+
############
82+
Colanderfile
83+
Strainerfile
84+
.colander
85+
.strainer
86+
87+
# Vagrant #
88+
###########
89+
.vagrant
90+
Vagrantfile
91+
92+
# Travis #
93+
##########
94+
.travis.yml

libraries/node.rb

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
class Chef::Node
2-
def cloudflare_client
3-
return @cloudflare_client unless @cloudflare_client.nil?
4-
Chef::Application.fatal!("You need to define the ['cloudflare']['credentials']['email'] and ['cloudflare']['credentials']['api_key'] node attributes to use the cloudflare cookbook") unless node['cloudflare']['credentials']['api_key'] && node['cloudflare']['credentials']['email']
5-
@cloudflare_client = CloudflareClient.new(node['cloudflare']['credentials']['api_key'], node['cloudflare']['credentials']['email'])
6-
Chef::Application.fatal!('Invalid CloudFlare credentials!') if node['cloudflare']['check_credentials'] && !@cloudflare_client.credentials_valid?
7-
@cloudflare_client
2+
def cloudflare_client
3+
return @cloudflare_client unless @cloudflare_client.nil?
4+
Chef::Application.fatal!("You need to define the ['cloudflare']['credentials']['email'] and ['cloudflare']['credentials']['api_key'] node attributes to use the cloudflare cookbook") \
5+
unless node['cloudflare']['credentials']['api_key'] && node['cloudflare']['credentials']['email']
6+
@cloudflare_client = CloudflareClient.new(node['cloudflare']['credentials']['api_key'], node['cloudflare']['credentials']['email'])
7+
Chef::Application.fatal!('Invalid CloudFlare credentials!') if node['cloudflare']['check_credentials'] && !@cloudflare_client.credentials_valid?
8+
@cloudflare_client
89
end
910
end

metadata.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "cloudflare",
33
"description": "Registers your server with Cloudflare's DNS service",
4-
"long_description": "Description\n===========\n\nThis Chef! cookbook defines one LWRP that you can easily use in your own cookbook to create and delete Cloudflare DNS records.\n\nIt is built on top of B4k3r's Ruby wrapper for the Cloudflare API. (https://github.com/B4k3r/cloudflare)\n\nRequirements\n============\n\nRequires Chef-client version 11.x or later.\n\nAttributes\n==========\n\nTo be able to use the `clouflare_dns_record` resource, you must define two nodes attributes: `['cloudflare']['credentials']['email']` and `['cloudflare']['credentials']['api_key']`.\n\nI strongly recommend storing your Cloudflare credentials in an encrypted data bag, and then decrypting them in your own cookbook. \n\nThere also are a number of optional node attributes:\n\n* `['cloudflare']['check_credentials']`: whether to check your Cloudflare credentials before attempting any API call (defaults to `true`)\n* `['cloudflare']['check_zone']`: whether to check if the specified DNS zone(s) exist(s) on your Cloudflare account before trying to add or delete records (defaults to `true`)\n* `['cloudflare']['check_with_DNS']`: whether to try checking your records' existence against a DNS server rather than querying the Cloudflare API (will still query the Cloudflare API if the DNS server does not return what's expected - defaults to `false`)\n* `['cloudflare']['DNS_server']`: if you use the `check_with_DNS` option, that is the DNS server that will be queried (defaults to `ns.cloudflare.com`, which is Cloudflare's main public DNS server)\n\nThose attributes come in especially handy if you have a number of servers and get throttled by Cloudflare's API limits.\n\nUsage\n=====\n\nTo use the `clouflare_dns_record` resource in your own cookbook, simply tell Chef! that your cookbook depends on this one, by adding `depends 'cloudflare'` in your `metadata.rb` file.\n\n`clouflare_dns_record` Resource\n-------------------------------\n\nThis resource defines the following attributes (they're all `String`s unless otherwise specified):\n\n* `name` (required): the name of the Chef! resource. It is also the name of the DNS record, unless the `record_name` attribute is set\n* `record_name` (optional): as said above, you can set that attribute to override the name of the DNS record (useful for registering several records with the same name - e.g. in different zones - during the same Chef! run)\n* `zone` (required): the zone of the DNS record\n* `content` (optional - defaults to `node.ipaddress`): the content of the DNS record\n* `type` (one of `'A'` or `'CNAME'` - defaults to `'A'`): the type of the DNS record. Please let me know if you'd like other record types supported\n* `ttl` (must be a `Fixnum` - defaults to `1`, which, according to Cloudflare doc, means 'automatic'): the ttl of the DNS record\n\nFor instance, the following code in your cookbook's recipe would create an `A` DNS record `server_name.example.com` pointing to `1.2.3.4` with an automatic TTL:\n\n cloudflare_dns_record 'server_name' do\n zone 'example.com'\n content '1.2.3.4'\n end\n\nThe `clouflare_dns_record` resource defines two different actions: `:create` and `:delete` (pretty self-explanatory); `:create` is the default one.\n\nAnother example:\n\n cloudflare_dns_record 'resource_name' do\n zone 'example.com'\n record_name 'server_name'\n action :delete\n end\n\nwould delete the `server_name.example.com` record from your Cloudflare account.\n\nContributing & Feedback\n=======================\n\nAs always, I appreciate bug reports, suggestions, pull requests, feedback...\nFeel free to reach me at <[email protected]>\n\nChanges\n=======\n\n* 0.1.4 (Apr 23, 2014)\n * Fixed a bug when there were too many records to be loaded in one call from CloudFlare\n * Made it more compliant with ill-formatted record names\n\n* 0.1.3 (Mar 21, 2014)\n * Upgraded the Cloudflare gem to the newest version 2.0.1\n\n* 0.1.2 (Nov 14, 2013)\n * Changed default DNS server from Google's to Cloudflare's to avoid new records from not resolving for a long time on Google's server\n\n* 0.1.1 (Nov 6, 2013)\n * Some small bug fixes\n * Reduced the number of calls to the Cloudflare API with the vanilla options\n * Added a number of options to reduce the number of calls to the Cloudflare API further, most notably made it possible to query a DNS server to check records' existence\n\n* 0.1.0 (Oct 3, 2013)\n * Initial release\n",
4+
"long_description": "Description\n===========\n\nThis Chef! cookbook defines one LWRP that you can easily use in your own cookbook to create and delete Cloudflare DNS records.\n\nIt is built on top of B4k3r's Ruby wrapper for the Cloudflare API. (https://github.com/B4k3r/cloudflare)\n\nRequirements\n============\n\nRequires Chef-client version 11.x or later.\n\nAttributes\n==========\n\nTo be able to use the `clouflare_dns_record` resource, you must define two nodes attributes: `['cloudflare']['credentials']['email']` and `['cloudflare']['credentials']['api_key']`.\n\nI strongly recommend storing your Cloudflare credentials in an encrypted data bag, and then decrypting them in your own cookbook. \n\nThere also are a number of optional node attributes:\n\n* `['cloudflare']['check_credentials']`: whether to check your Cloudflare credentials before attempting any API call (defaults to `true`)\n* `['cloudflare']['check_zone']`: whether to check if the specified DNS zone(s) exist(s) on your Cloudflare account before trying to add or delete records (defaults to `true`)\n* `['cloudflare']['check_with_DNS']`: whether to try checking your records' existence against a DNS server rather than querying the Cloudflare API (will still query the Cloudflare API if the DNS server does not return what's expected - defaults to `false`)\n* `['cloudflare']['DNS_server']`: if you use the `check_with_DNS` option, that is the DNS server that will be queried (defaults to `ns.cloudflare.com`, which is Cloudflare's main public DNS server)\n\nThose attributes come in especially handy if you have a number of servers and get throttled by Cloudflare's API limits.\n\nUsage\n=====\n\nTo use the `clouflare_dns_record` resource in your own cookbook, simply tell Chef! that your cookbook depends on this one, by adding `depends 'cloudflare'` in your `metadata.rb` file.\n\n`clouflare_dns_record` Resource\n-------------------------------\n\nThis resource defines the following attributes (they're all `String`s unless otherwise specified):\n\n* `name` (required): the name of the Chef! resource. It is also the name of the DNS record, unless the `record_name` attribute is set\n* `record_name` (optional): as said above, you can set that attribute to override the name of the DNS record (useful for registering several records with the same name - e.g. in different zones - during the same Chef! run)\n* `zone` (required): the zone of the DNS record\n* `content` (optional - defaults to `node.ipaddress`): the content of the DNS record\n* `type` (one of `'A'` or `'CNAME'` - defaults to `'A'`): the type of the DNS record. Please let me know if you'd like other record types supported\n* `ttl` (must be a `Fixnum` - defaults to `1`, which, according to Cloudflare doc, means 'automatic'): the ttl of the DNS record\n\nFor instance, the following code in your cookbook's recipe would create an `A` DNS record `server_name.example.com` pointing to `1.2.3.4` with an automatic TTL:\n\n cloudflare_dns_record 'server_name' do\n zone 'example.com'\n content '1.2.3.4'\n end\n\nThe `clouflare_dns_record` resource defines two different actions: `:create` and `:delete` (pretty self-explanatory); `:create` is the default one.\n\nAnother example:\n\n cloudflare_dns_record 'resource_name' do\n zone 'example.com'\n record_name 'server_name'\n action :delete\n end\n\nwould delete the `server_name.example.com` record from your Cloudflare account.\n\nExample recipe\n==============\n\nYou can have a look at the `cloudflare::example` recipe for examples on how to use the LWRPs.\n\nYou can also test my cookbook with Vagrant (see the 'Vagrant' section below).\n\nVagrant\n=======\n\nYou can test this cookbook locally, provided you have a bunch of free software installed, namely [Vagrant](https://www.vagrantup.com/downloads), [Berkshelf](http://berkshelf.com/), [VirtualBox](https://www.virtualbox.org/), and a couple of Vagrant plugins: [Vagrant-Berkshelf](https://github.com/berkshelf/vagrant-berkshelf) and [Vagrant-Omnibus](https://github.com/schisamo/vagrant-omnibus).\n\nYou also need to define 3 environment variables to be able to use my Vagrantfile:\n\n* `CLOUDFLARE_EMAIL`\n* `CLOUDFLARE_API_KEY`\n* `CLOUDFLARE_DOMAIN`\n\nYou can do so by typing e.g. `export CLOUDFLARE_EMAIL='[email protected]'` and so on in your shell.\n\nBe aware that the example recipe will then proceed to create a few DNS records on that DNS zone with your credentials, so use with caution!\n\nThen playing with this cookbook should be as easy as running `bundle install && vagrant up`!\n\nContributing & Feedback\n=======================\n\nAs always, I appreciate bug reports, suggestions, pull requests, feedback...\nFeel free to reach me at <[email protected]>\n\nChanges\n=======\n\n* 0.1.5 (Jul 8, 2014)\n * Included Vagrant & Berkshelf for easier development\n\n* 0.1.4 (Apr 23, 2014)\n * Fixed a bug when there were too many records to be loaded in one call from CloudFlare\n * Made it more compliant with ill-formatted record names\n\n* 0.1.3 (Mar 21, 2014)\n * Upgraded the Cloudflare gem to the newest version 2.0.1\n\n* 0.1.2 (Nov 14, 2013)\n * Changed default DNS server from Google's to Cloudflare's to avoid new records from not resolving for a long time on Google's server\n\n* 0.1.1 (Nov 6, 2013)\n * Some small bug fixes\n * Reduced the number of calls to the Cloudflare API with the vanilla options\n * Added a number of options to reduce the number of calls to the Cloudflare API further, most notably made it possible to query a DNS server to check records' existence\n\n* 0.1.0 (Oct 3, 2013)\n * Initial release\n",
55
"maintainer": "Jean Rouge",
66
"maintainer_email": "[email protected]",
77
"license": "unlicense",
@@ -25,5 +25,5 @@
2525
},
2626
"recipes": {
2727
},
28-
"version": "0.1.4"
28+
"version": "0.1.5"
2929
}

metadata.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
license 'unlicense'
55
description 'Registers your server with Cloudflare\'s DNS service'
66
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
7-
version '0.1.4'
7+
version '0.1.5'

recipes/example.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# This example recipe shows how to use the cloudflare_dns_record LWRP
2+
3+
cloudflare_dns_record 'example' do
4+
zone node['cloudflare']['example_zone']
5+
end

0 commit comments

Comments
 (0)