The data store behind the broker is a MongoDB. That one back end service isn't pluggable. It's actually been made more tightly coupled to Mongo, but in this case that's a good thing. What changed is that all of the Rails application model objects have been converted to use the Mongoid ODM rubygem. All of the object persistence is now managed in the background and all of the logic can just deal with the objects as... well... objects.
There are a couple of implications for broker service verification.
- The broker connects to the database on startup
This means that if the database access/auth information is wrong, the rails app will fail to start. - The only simple way to test the connection is to create an object and observe the database.
This is both simpler to do, and potentially more difficult to diagnose on failure.
I think the second point won't be as much of a downside as I would fear at first. I suspect that if connectivity is good, the rest will be. If it's not, it will be fairly clear why.
Configuring the Broker Data Store
Configuring the datastore access information hasn't changed. The configuration information is still stored in
/etc/openshift/broker.conf
. The settings all have the MONGO_
prefix:MONGO_HOST_PORT="data1.example.com:27017" MONGO_USER="openshift" MONGO_PASSWORD="dontuseme" MONGO_DB="openshift" MONGO_SSL="false"
Adjust these for your mongodb implementation. Remember to open the firewall for the broker on your database host. Configure the database to listen and test the connectivity locally.
Verifying Simple Connectivity
You also want to check the connectivity from your broker host before trying to fire up the broker itself.
broker> echo "show collections" | mongo --username openshift --password dontuseme data1.example.com:27017/openshift MongoDB shell version: 2.2.3 connecting to: data1.example.com:27017/openshift system.indexes< system.users bye
You can do this repeatedly and observe the mongodb log on the database host.
Observing the Mongo Database Logs
On the database host, take a look at the mongodb logs. You should see a new entry (successful or failed) each time a client connects.
data1> tail /var/log/mongodb/mongodb.log Thu Mar 21 20:24:26 [conn15] authenticate db: openshift { authenticate: 1, nonce: "20d6f85f33f03dee", user: "openshift", key: "60639c7ce56851a25be56bcebd98c3ed" }
Starting the Rails Console
Now that you're sure that the database is running and accessible from your broker host you can try firing up the Rails console. This assumes that you've resolved all of the gem requirements. If not, the Rails console will complain about them and exit.
broker> cd /var/www/openshift/broker broker> rails console Loading production environment (Rails 3.2.8) irb(main):001:0>
If you go this far you should have seen one more authentication log record on the mongodb server. (see above)
Create a Database Object
Now we can create a CloudUser object and watch it appear in the database
irb(main):001:0> user = CloudUser.create(login: "testuser") => #<CloudUser _id: 514b6f6cf3da7fa491000001, created_at: 2013-03-21 20:37:00 UTC, updated_at: 2013-03-21 20:37:00 UTC, login: "testuser", capabilities: {"subaccounts"=>false, "gear_sizes"=>["small"], "max_gears"=>100}, parent_user_id: nil, plan_id: nil, pending_plan_id: nil, pending_plan_uptime: nil, usage_account_id: nil, consumed_gears: 0>
You can see that this is more than your typical Ruby object. The ID and created_at and updated_att fields are artifacts of the ODM persistence. You won't see another log message because the database connection is persistent using the ODM. You will find that there's now a document in the openshift.cloud_user collection.
data> echo "db.cloud_users.find()" | mongo --username openshift --password dbsecret localhost/openshift MongoDB shell version: 2.2.3< connecting to: localhost/openshift { "_id" : ObjectId("514b6f6cf3da7fa491000001"), "consumed_gears" : 0, "login" : "testuser", "capabilities" : { "subaccounts" : false, "gear_sizes" : [ "small" ], "max_gears" : 100 }, "updated_at" : ISODate("2013-03-21T20:37:00.546Z"), "created_at" : ISODate("2013-03-21T20:37:00.546Z") } bye
Removing the Test Object
Cleaning up is just as easy
irb(main):002:0> user.delete< => true
And to verify that it's been removed:
echo "db.cloud_users.find()" | mongo --username openshift --password dbsecret localhost/openshift MongoDB shell version: 2.2.3 connecting to: localhost/openshift bye
At this point you know both that your database is running and that the broker application can connect and read and write it.
Much simpler with an ODM.
No comments:
Post a Comment