Thank you for replying. What I want back, whether that's what I'm
asking for or not, is the entire bag, data_bags/rollups/uas-replicaset-1.json:
{
"id" : "uas-replicaset-1",
"name" : "uas-replica",
"description" : "Shard 1 replica set",
"replica_1" : { "hostname" : "16.86.193.117", "port"
: 37017, "node" : "uas-dev-db01" },
"replica_2" : { "hostname" : "16.86.193.118", "port"
: 37018, "node" : "uas-dev-db02" },
"replica_3" : { "hostname" : "16.86.193.119", "port"
: 37019, "node" : "uas-dev-db03" }
}
I need all of this information during my
recipe. What must I write in my recipe code to cause that to
happen, that is, to cause bag to point to the Ruby construct
created from the JSON above?
On 9/30/2013 11:43 AM, Cassiano Leal
wrote:
"
type="cite">
Hey,
The error you’re getting is because when you do
bag =
search( :rollups, which )
the bag object is an Array, not a Hash.
When you try to do
replSet_name = bag[ :name ]
That’s where the problem arises. You’re trying to reference
an Array item (which is number-indexed) through a Symbol
(:name).
If you’re sure that the search will only return one item,
you can do instead:
bag =
search( :rollups, which ).first
--
Cassiano Leal
On Monday, September 30, 2013 at 14:34,
Russell Bateman wrote:
I'm just striking out when I try to use a data bag from my
recipe. It looks very simple to me, so I'm guessing
there's just something very fundamental I don't get. I'm unable to mimic the opscode/Chef
examples in my code. I would greatly appreciate
understanding what's wrong with how I'm trying to
consume the data bag.
Thanks!
I have my own Chef server set up and a number of nodes.
I have had a lot of success so far, but data bags
aren't working for me.
Here's the t op of my recipe;
I've put some print statements in:
which = "id:" + node[ :rollup ] #
i.e.: "uas-replicaset-1"
puts "which", which
bag = search( :rollups, which ) # TROUBLE
HERE!!!!!!
puts "bag", bag
port = node[ :port ]
replSet_name = bag[ :name ]
# Copy the upstart configuration file to
/etc/init...
template "/etc/init/mongodb.conf" do
source "replica-upstart.conf.erb"
owner "root"
group "root"
mode 00644 # -rw-r--r--
end
template "/data/mongodb/mongodb.conf" do
source "replica.conf.erb"
owner "mongodb"
group "mongodb"
mode 00644 # -rw-r--r--
variables( {
:port => port,
:replSet => replSet_name
}
)
notifies :restart, "service[ $ip_address ]",
:immediately
end
Here's what's in nodes/uas-dev-db01.json:
{
"normal": { "port" : 27017, "rollup" :
"uas-replicaset-1" },
"name": "uas-dev-db01",
"override": { },
.
.
.
Here's the data bag, data_bags/rollups/uas-replicaset-1.json:
{
"id" : "uas-replicaset-1",
"name" : "uas-replica",
"description" : "Shard 1 replica set",
"replica_1" : { "hostname" :
"16.86.193.117", "port" : 37017, "node" :
"uas-dev-db01" },
"replica_2" : { "hostname" :
"16.86.193.118", "port" : 37018, "node" :
"uas-dev-db02" },
"replica_3" : { "hostname" :
"16.86.193.119", "port" : 37019, "node" :
"uas-dev-db03" }
}
Here's the output running chef-client.
.
.
.
Compiling Cookbooks...
16.86.192.117
[2013-09-30T17:04:53+00:00] INFO: AptPreference
light-weight provider already initialized --
overriding!
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.4/lib/chef/provider/lwrp_base.rb:97:
warning: already initialized constant AptPreference
[2013-09-30T17:04:53+00:00] INFO: AptRepository
light-weight provider already initialized --
overriding!
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.4/lib/chef/provider/lwrp_base.rb:97:
warning: already initialized constant AptRepository
[2013-09-30T17:04:53+00:00] INFO: AptPreference
light-weight resource already initialized --
overriding!
[2013-09-30T17:04:53+00:00] INFO: AptRepository
light-weight resource already initialized --
overriding!
which
id:uas-replicaset-1
bag
data_bag_item[uas-replicaset-1] <-------- I
don't understand this, but I guess I'll roll with it
================================================================================
Recipe Compile Error in
/var/chef/cache/cookbooks/mongodb/recipes/replica.rb
================================================================================
TypeError
---------
can't convert Symbol into Integer
Cookbook Trace:
---------------
/var/chef/cache/cookbooks/mongodb/recipes/replica.rb:15:in
`[]'
/var/chef/cache/cookbooks/mongodb/recipes/replica.rb:15:in
`from_file'
Relevant File Content:
----------------------
/var/chef/cache/cookbooks/mongodb/recipes/replica.rb:
8: which = "id:" + node[ :rollup ] #
i.e.: "uas-replicaset-1"
9: puts "which", which
10: bag = search( :rollups, which )
11:
12: puts "bag", bag
13:
14: port = node[ :port ]
15>> replSet_name = bag[ :name ]
16:
17: # Copy the upstart configuration file to
/etc/init...
18: template "/etc/init/mongodb.conf" do
19: source "replica-upstart.conf.erb"
20: owner "root"
21: group "root"
22: mode 00644 # -rw-r--r--
23: end
24:
|