[Swift-commit] r5330 - in branches/release-0.93: . bin bin/vm bin/vm/ec2 bin/vm/ec2/bin bin/vm/ec2/lib bin/vm/ec2/lib/python2.7 bin/vm/ec2/lib/python2.7/site-packages bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/files bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py 2.7.egg/globus/provision/chef-files/cookbooks/apt/files/default bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/providers bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/recipes bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/resources bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/files bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/files/default bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3 .2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/templates bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/templates/default bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/templates bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/templates/default bin/vm/ec2/lib/python2.7/sit e-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates/default bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/attributes bin/vm/ec2/lib/pyt hon2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/files bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/files/default bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/recipes bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/attributes bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/ templates/default bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/attributes bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py 2.7.egg/globus/provision/chef-files/roles bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/dummy bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/ec2 bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/tests bin/vm/futuregrid bin/vm/futuregrid/plan

davidk at ci.uchicago.edu davidk at ci.uchicago.edu
Fri Dec 2 10:38:41 CST 2011


Author: davidk
Date: 2011-12-02 10:38:40 -0600 (Fri, 02 Dec 2011)
New Revision: 5330

Added:
   branches/release-0.93/bin/vm/
   branches/release-0.93/bin/vm/ec2/
   branches/release-0.93/bin/vm/ec2/bin/
   branches/release-0.93/bin/vm/ec2/bin/bundle_image
   branches/release-0.93/bin/vm/ec2/bin/cfadmin
   branches/release-0.93/bin/vm/ec2/bin/cq
   branches/release-0.93/bin/vm/ec2/bin/cwutil
   branches/release-0.93/bin/vm/ec2/bin/elbadmin
   branches/release-0.93/bin/vm/ec2/bin/fetch_file
   branches/release-0.93/bin/vm/ec2/bin/gp-ec2-create-ami
   branches/release-0.93/bin/vm/ec2/bin/gp-ec2-update-ami
   branches/release-0.93/bin/vm/ec2/bin/gp-go-register-endpoints
   branches/release-0.93/bin/vm/ec2/bin/gp-instance-add-host
   branches/release-0.93/bin/vm/ec2/bin/gp-instance-add-user
   branches/release-0.93/bin/vm/ec2/bin/gp-instance-create
   branches/release-0.93/bin/vm/ec2/bin/gp-instance-describe
   branches/release-0.93/bin/vm/ec2/bin/gp-instance-list
   branches/release-0.93/bin/vm/ec2/bin/gp-instance-remove-hosts
   branches/release-0.93/bin/vm/ec2/bin/gp-instance-remove-users
   branches/release-0.93/bin/vm/ec2/bin/gp-instance-start
   branches/release-0.93/bin/vm/ec2/bin/gp-instance-stop
   branches/release-0.93/bin/vm/ec2/bin/gp-instance-terminate
   branches/release-0.93/bin/vm/ec2/bin/gp-instance-update
   branches/release-0.93/bin/vm/ec2/bin/kill_instance
   branches/release-0.93/bin/vm/ec2/bin/launch_instance
   branches/release-0.93/bin/vm/ec2/bin/list_instances
   branches/release-0.93/bin/vm/ec2/bin/lss3
   branches/release-0.93/bin/vm/ec2/bin/pyami_sendmail
   branches/release-0.93/bin/vm/ec2/bin/route53
   branches/release-0.93/bin/vm/ec2/bin/s3multiput
   branches/release-0.93/bin/vm/ec2/bin/s3put
   branches/release-0.93/bin/vm/ec2/bin/sdbadmin
   branches/release-0.93/bin/vm/ec2/bin/taskadmin
   branches/release-0.93/bin/vm/ec2/ec2.template.conf
   branches/release-0.93/bin/vm/ec2/lib/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/easy-install.pth
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/PKG-INFO
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/SOURCES.txt
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/dependency_links.txt
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/entry_points.txt
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/not-zip-safe
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/requires.txt
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/top_level.txt
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/__init__.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/__init__.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/README.md
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/README.md
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/TODO.org
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/files/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/files/default/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/files/default/apt-cacher
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/files/default/apt-cacher.conf
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/files/default/apt-proxy-v2.conf
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/metadata.json
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/metadata.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/providers/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/providers/repository.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/recipes/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/recipes/cacher-client.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/recipes/cacher.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/recipes/default.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/resources/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/resources/repository.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/README.rdoc
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/files/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/files/default/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/files/default/condor-dir.conf
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/metadata.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/condor.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/condor_head.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/condor_worker.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/default.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/templates/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/templates/default/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/templates/default/condor_config.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/README.rdoc
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/galaxy-setup.sh
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/galaxy.init
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/universe_wsgi-globus.ini
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/universe_wsgi.ini
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/metadata.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/blast-nfsserver.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/default.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/galaxy-globus-common.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/galaxy-globus.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/templates/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/templates/default/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/templates/default/galaxy-universe.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/README.rdoc
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/4396eb4d.0
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/4396eb4d.signing_policy
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/anon.cert
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/anon.key
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/d1b603c3.0
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/d1b603c3.signing_policy
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/gd-bundle_ca.cert
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/gridftp.conf
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/myproxy-server.config
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/xinetd.myproxy
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/metadata.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/client-tools.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/default.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gc-cert.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/go_cert.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gridftp-common.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gridftp-default.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gridftp-gc.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/myproxy.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/repository.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates/default/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates/default/myproxy-dnmap.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates/default/xinetd.gram.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates/default/xinetd.gridftp.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/README.md
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/attributes/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/attributes/default.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/files/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/files/default/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/files/default/java.seed
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/metadata.json
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/metadata.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/recipes/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/recipes/default.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/recipes/openjdk.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/recipes/sun.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/README.rdoc
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/attributes/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/attributes/default.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/metadata.json
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/metadata.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/client.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/default.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/server.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/server_debian.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/server_redhat.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/debian.pg_hba.conf.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/debian.postgresql.conf.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/redhat.pg_hba.conf.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/redhat.postgresql.conf.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/README.rdoc
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/attributes/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/attributes/default.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/auto.master
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/grid-ca-ssl.conf
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/nfs-common
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/nfs-kernel-server
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/nis
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/metadata.json
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/metadata.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/ca.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/default.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/domain_users.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/ec2.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/gp_node.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/gridmap.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/hostcert.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nfs_client.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nfs_server.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nis_client.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nis_server.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/simpleca.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/auto.home.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/auto.nfs.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/exports.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/globus-ssl.conf.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/grid-security.conf.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/gridmap.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/hosts.denyallow.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/signing_policy.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/ypserv.securenets.erb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/README.md
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-clusternode-condor.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-condor.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-gridftp-default.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-gridftp-gc.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-myproxy.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-nfsnis-client.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-nfsnis.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/globus.rb
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/__init__.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/api.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/ec2.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/globusonline.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/__init__.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/certs.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/config.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/defaults.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/go_transfer.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/log.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/persistence.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/ssh.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/threads.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/utils.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/__init__.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/api.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/config.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/deploy.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/instance.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/topology.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/__init__.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/dummy/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/dummy/__init__.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/ec2/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/ec2/__init__.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/ec2/images.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/tests/
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/tests/__init__.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/tests/common.py
   branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/tests/test_samples.py
   branches/release-0.93/bin/vm/futuregrid/
   branches/release-0.93/bin/vm/futuregrid/plan/
   branches/release-0.93/bin/vm/futuregrid/plan/test-level1.conf
   branches/release-0.93/bin/vm/futuregrid/plan/top.conf
Modified:
   branches/release-0.93/build.xml
Log:
EC2 and futuregrid utilities


Added: branches/release-0.93/bin/vm/ec2/bin/bundle_image
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/bundle_image	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/bundle_image	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','bundle_image'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 'bundle_image')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/bundle_image
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/cfadmin
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/cfadmin	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/cfadmin	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','cfadmin'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 'cfadmin')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/cfadmin
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/cq
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/cq	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/cq	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','cq'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 'cq')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/cq
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/cwutil
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/cwutil	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/cwutil	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','cwutil'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 'cwutil')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/cwutil
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/elbadmin
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/elbadmin	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/elbadmin	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','elbadmin'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 'elbadmin')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/elbadmin
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/fetch_file
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/fetch_file	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/fetch_file	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','fetch_file'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 'fetch_file')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/fetch_file
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/gp-ec2-create-ami
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/gp-ec2-create-ami	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/gp-ec2-create-ami	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+# EASY-INSTALL-ENTRY-SCRIPT: 'globus-provision==0.3.2','console_scripts','gp-ec2-create-ami'
+__requires__ = 'globus-provision==0.3.2'
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+    sys.exit(
+        load_entry_point('globus-provision==0.3.2', 'console_scripts', 'gp-ec2-create-ami')()
+    )


Property changes on: branches/release-0.93/bin/vm/ec2/bin/gp-ec2-create-ami
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/gp-ec2-update-ami
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/gp-ec2-update-ami	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/gp-ec2-update-ami	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+# EASY-INSTALL-ENTRY-SCRIPT: 'globus-provision==0.3.2','console_scripts','gp-ec2-update-ami'
+__requires__ = 'globus-provision==0.3.2'
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+    sys.exit(
+        load_entry_point('globus-provision==0.3.2', 'console_scripts', 'gp-ec2-update-ami')()
+    )


Property changes on: branches/release-0.93/bin/vm/ec2/bin/gp-ec2-update-ami
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/gp-go-register-endpoints
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/gp-go-register-endpoints	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/gp-go-register-endpoints	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+# EASY-INSTALL-ENTRY-SCRIPT: 'globus-provision==0.3.2','console_scripts','gp-go-register-endpoints'
+__requires__ = 'globus-provision==0.3.2'
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+    sys.exit(
+        load_entry_point('globus-provision==0.3.2', 'console_scripts', 'gp-go-register-endpoints')()
+    )


Property changes on: branches/release-0.93/bin/vm/ec2/bin/gp-go-register-endpoints
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/gp-instance-add-host
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/gp-instance-add-host	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/gp-instance-add-host	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+# EASY-INSTALL-ENTRY-SCRIPT: 'globus-provision==0.3.2','console_scripts','gp-instance-add-host'
+__requires__ = 'globus-provision==0.3.2'
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+    sys.exit(
+        load_entry_point('globus-provision==0.3.2', 'console_scripts', 'gp-instance-add-host')()
+    )


Property changes on: branches/release-0.93/bin/vm/ec2/bin/gp-instance-add-host
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/gp-instance-add-user
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/gp-instance-add-user	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/gp-instance-add-user	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+# EASY-INSTALL-ENTRY-SCRIPT: 'globus-provision==0.3.2','console_scripts','gp-instance-add-user'
+__requires__ = 'globus-provision==0.3.2'
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+    sys.exit(
+        load_entry_point('globus-provision==0.3.2', 'console_scripts', 'gp-instance-add-user')()
+    )


Property changes on: branches/release-0.93/bin/vm/ec2/bin/gp-instance-add-user
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/gp-instance-create
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/gp-instance-create	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/gp-instance-create	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+# EASY-INSTALL-ENTRY-SCRIPT: 'globus-provision==0.3.2','console_scripts','gp-instance-create'
+__requires__ = 'globus-provision==0.3.2'
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+    sys.exit(
+        load_entry_point('globus-provision==0.3.2', 'console_scripts', 'gp-instance-create')()
+    )


Property changes on: branches/release-0.93/bin/vm/ec2/bin/gp-instance-create
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/gp-instance-describe
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/gp-instance-describe	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/gp-instance-describe	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+# EASY-INSTALL-ENTRY-SCRIPT: 'globus-provision==0.3.2','console_scripts','gp-instance-describe'
+__requires__ = 'globus-provision==0.3.2'
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+    sys.exit(
+        load_entry_point('globus-provision==0.3.2', 'console_scripts', 'gp-instance-describe')()
+    )


Property changes on: branches/release-0.93/bin/vm/ec2/bin/gp-instance-describe
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/gp-instance-list
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/gp-instance-list	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/gp-instance-list	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+# EASY-INSTALL-ENTRY-SCRIPT: 'globus-provision==0.3.2','console_scripts','gp-instance-list'
+__requires__ = 'globus-provision==0.3.2'
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+    sys.exit(
+        load_entry_point('globus-provision==0.3.2', 'console_scripts', 'gp-instance-list')()
+    )


Property changes on: branches/release-0.93/bin/vm/ec2/bin/gp-instance-list
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/gp-instance-remove-hosts
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/gp-instance-remove-hosts	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/gp-instance-remove-hosts	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+# EASY-INSTALL-ENTRY-SCRIPT: 'globus-provision==0.3.2','console_scripts','gp-instance-remove-hosts'
+__requires__ = 'globus-provision==0.3.2'
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+    sys.exit(
+        load_entry_point('globus-provision==0.3.2', 'console_scripts', 'gp-instance-remove-hosts')()
+    )


Property changes on: branches/release-0.93/bin/vm/ec2/bin/gp-instance-remove-hosts
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/gp-instance-remove-users
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/gp-instance-remove-users	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/gp-instance-remove-users	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+# EASY-INSTALL-ENTRY-SCRIPT: 'globus-provision==0.3.2','console_scripts','gp-instance-remove-users'
+__requires__ = 'globus-provision==0.3.2'
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+    sys.exit(
+        load_entry_point('globus-provision==0.3.2', 'console_scripts', 'gp-instance-remove-users')()
+    )


Property changes on: branches/release-0.93/bin/vm/ec2/bin/gp-instance-remove-users
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/gp-instance-start
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/gp-instance-start	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/gp-instance-start	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+# EASY-INSTALL-ENTRY-SCRIPT: 'globus-provision==0.3.2','console_scripts','gp-instance-start'
+__requires__ = 'globus-provision==0.3.2'
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+    sys.exit(
+        load_entry_point('globus-provision==0.3.2', 'console_scripts', 'gp-instance-start')()
+    )


Property changes on: branches/release-0.93/bin/vm/ec2/bin/gp-instance-start
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/gp-instance-stop
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/gp-instance-stop	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/gp-instance-stop	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+# EASY-INSTALL-ENTRY-SCRIPT: 'globus-provision==0.3.2','console_scripts','gp-instance-stop'
+__requires__ = 'globus-provision==0.3.2'
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+    sys.exit(
+        load_entry_point('globus-provision==0.3.2', 'console_scripts', 'gp-instance-stop')()
+    )


Property changes on: branches/release-0.93/bin/vm/ec2/bin/gp-instance-stop
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/gp-instance-terminate
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/gp-instance-terminate	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/gp-instance-terminate	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+# EASY-INSTALL-ENTRY-SCRIPT: 'globus-provision==0.3.2','console_scripts','gp-instance-terminate'
+__requires__ = 'globus-provision==0.3.2'
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+    sys.exit(
+        load_entry_point('globus-provision==0.3.2', 'console_scripts', 'gp-instance-terminate')()
+    )


Property changes on: branches/release-0.93/bin/vm/ec2/bin/gp-instance-terminate
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/gp-instance-update
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/gp-instance-update	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/gp-instance-update	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+# EASY-INSTALL-ENTRY-SCRIPT: 'globus-provision==0.3.2','console_scripts','gp-instance-update'
+__requires__ = 'globus-provision==0.3.2'
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+    sys.exit(
+        load_entry_point('globus-provision==0.3.2', 'console_scripts', 'gp-instance-update')()
+    )


Property changes on: branches/release-0.93/bin/vm/ec2/bin/gp-instance-update
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/kill_instance
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/kill_instance	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/kill_instance	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','kill_instance'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 'kill_instance')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/kill_instance
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/launch_instance
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/launch_instance	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/launch_instance	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','launch_instance'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 'launch_instance')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/launch_instance
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/list_instances
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/list_instances	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/list_instances	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','list_instances'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 'list_instances')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/list_instances
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/lss3
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/lss3	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/lss3	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','lss3'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 'lss3')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/lss3
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/pyami_sendmail
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/pyami_sendmail	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/pyami_sendmail	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','pyami_sendmail'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 'pyami_sendmail')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/pyami_sendmail
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/route53
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/route53	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/route53	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','route53'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 'route53')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/route53
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/s3multiput
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/s3multiput	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/s3multiput	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','s3multiput'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 's3multiput')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/s3multiput
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/s3put
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/s3put	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/s3put	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','s3put'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 's3put')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/s3put
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/sdbadmin
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/sdbadmin	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/sdbadmin	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','sdbadmin'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 'sdbadmin')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/sdbadmin
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/bin/taskadmin
===================================================================
--- branches/release-0.93/bin/vm/ec2/bin/taskadmin	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/bin/taskadmin	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+#!/usr/bin/python
+# EASY-INSTALL-SCRIPT: 'boto==2.1.1','taskadmin'
+__requires__ = 'boto==2.1.1'
+import pkg_resources
+pkg_resources.run_script('boto==2.1.1', 'taskadmin')


Property changes on: branches/release-0.93/bin/vm/ec2/bin/taskadmin
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/ec2.template.conf
===================================================================
--- branches/release-0.93/bin/vm/ec2/ec2.template.conf	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/ec2.template.conf	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,17 @@
+[general]
+domains: swift
+deploy: ec2
+
+[domain-swift]
+users: swift
+nfs-nis: yes
+lrm: none
+cluster-nodes: _CLUSTER-NODES_
+
+[ec2]
+ami: _AMI_
+instance-type: _INSTANCE-TYPE_
+keypair: _KEYPAIR_
+keyfile: _KEYFILE_
+username: ubuntu
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/easy-install.pth
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/easy-install.pth	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/easy-install.pth	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,7 @@
+import sys; sys.__plen = len(sys.path)
+./globus_provision-0.3.2-py2.7.egg
+/usr/local/lib/python2.7/dist-packages/globusonline_transfer_api_client-0.10.8-py2.7.egg
+/usr/local/lib/python2.7/dist-packages/colorama-0.2.4-py2.7.egg
+/usr/local/lib/python2.7/dist-packages/paramiko-1.7.7.1-py2.7.egg
+/usr/local/lib/python2.7/dist-packages/boto-2.1.1-py2.7.egg
+import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/PKG-INFO
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/PKG-INFO	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/PKG-INFO	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,20 @@
+Metadata-Version: 1.0
+Name: globus-provision
+Version: 0.3.2
+Summary: A tool for deploying fully-configured Globus systems on Amazon EC2
+Home-page: http://globus.org/provision
+Author: University of Chicago
+Author-email: borja at cs.uchicago.edu
+License: Apache Software License
+Description: UNKNOWN
+Platform: UNKNOWN
+Classifier: Development Status :: 4 - Beta
+Classifier: Environment :: Console
+Classifier: Intended Audience :: Developers
+Classifier: Intended Audience :: System Administrators
+Classifier: Intended Audience :: Education
+Classifier: License :: OSI Approved :: Apache Software License
+Classifier: Operating System :: POSIX
+Classifier: Programming Language :: Python
+Classifier: Topic :: Scientific/Engineering
+Classifier: Topic :: System :: Distributed Computing

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/SOURCES.txt
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/SOURCES.txt	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/SOURCES.txt	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,206 @@
+README.TXT
+distribute_setup.py
+setup.cfg
+setup.py
+doc/Makefile
+doc/arch.png
+doc/changelog.rst
+doc/cli_ref_top.rst
+doc/conf.py
+doc/config_ref_top.rst
+doc/developer.rst
+doc/docs.rst
+doc/download.rst
+doc/ec2.rst
+doc/example_cluster.png
+doc/example_mini_clusters.png
+doc/figures.odg
+doc/gen_ami_page.py
+doc/gen_cli_doc.py
+doc/gen_config_doc.py
+doc/gen_recipe_doc.py
+doc/gen_samples.py
+doc/gen_topology_doc.py
+doc/go.rst
+doc/guide_autocomplete.rst
+doc/guide_compute_go.rst
+doc/guides.rst
+doc/index.rst
+doc/install.rst
+doc/instance_operations.rst
+doc/intro.rst
+doc/intro_common.rst
+doc/quickstart.rst
+doc/recipe_ref_top.rst
+doc/stopology_ref_top.rst
+doc/support.rst
+doc/topology.rst
+doc/topology_ref_top.rst
+doc/whatis.rst
+doc/_static/logo.png
+doc/_templates/layout.html
+doc/_templates/quickstart.html
+samples/dummy.conf
+samples/ec2.conf
+samples/go-condor-ec2.conf
+samples/go-gridftp-ec2.conf
+samples/simple-dummy.conf
+samples/simple-ec2.conf
+samples/single-gridftp-ec2.conf
+scripts/gp-complete.sh
+src/dg_paraproxy/WrapSock.py
+src/dg_paraproxy/__init__.py
+src/globus/__init__.py
+src/globus/provision/__init__.py
+src/globus/provision/chef-files/README.md
+src/globus/provision/chef-files/cookbooks/apt/README.md
+src/globus/provision/chef-files/cookbooks/apt/TODO.org
+src/globus/provision/chef-files/cookbooks/apt/metadata.json
+src/globus/provision/chef-files/cookbooks/apt/metadata.rb
+src/globus/provision/chef-files/cookbooks/apt/files/default/apt-cacher
+src/globus/provision/chef-files/cookbooks/apt/files/default/apt-cacher.conf
+src/globus/provision/chef-files/cookbooks/apt/files/default/apt-proxy-v2.conf
+src/globus/provision/chef-files/cookbooks/apt/providers/repository.rb
+src/globus/provision/chef-files/cookbooks/apt/recipes/cacher-client.rb
+src/globus/provision/chef-files/cookbooks/apt/recipes/cacher.rb
+src/globus/provision/chef-files/cookbooks/apt/recipes/default.rb
+src/globus/provision/chef-files/cookbooks/apt/resources/repository.rb
+src/globus/provision/chef-files/cookbooks/condor/README.rdoc
+src/globus/provision/chef-files/cookbooks/condor/metadata.rb
+src/globus/provision/chef-files/cookbooks/condor/files/default/condor-dir.conf
+src/globus/provision/chef-files/cookbooks/condor/recipes/condor.rb
+src/globus/provision/chef-files/cookbooks/condor/recipes/condor_head.rb
+src/globus/provision/chef-files/cookbooks/condor/recipes/condor_worker.rb
+src/globus/provision/chef-files/cookbooks/condor/recipes/default.rb
+src/globus/provision/chef-files/cookbooks/condor/templates/default/condor_config.erb
+src/globus/provision/chef-files/cookbooks/galaxy/README.rdoc
+src/globus/provision/chef-files/cookbooks/galaxy/metadata.rb
+src/globus/provision/chef-files/cookbooks/galaxy/files/default/galaxy-setup.sh
+src/globus/provision/chef-files/cookbooks/galaxy/files/default/galaxy.init
+src/globus/provision/chef-files/cookbooks/galaxy/files/default/universe_wsgi-globus.ini
+src/globus/provision/chef-files/cookbooks/galaxy/files/default/universe_wsgi.ini
+src/globus/provision/chef-files/cookbooks/galaxy/recipes/blast-nfsserver.rb
+src/globus/provision/chef-files/cookbooks/galaxy/recipes/default.rb
+src/globus/provision/chef-files/cookbooks/galaxy/recipes/galaxy-globus-common.rb
+src/globus/provision/chef-files/cookbooks/galaxy/recipes/galaxy-globus.rb
+src/globus/provision/chef-files/cookbooks/galaxy/templates/default/galaxy-universe.erb
+src/globus/provision/chef-files/cookbooks/globus/README.rdoc
+src/globus/provision/chef-files/cookbooks/globus/metadata.rb
+src/globus/provision/chef-files/cookbooks/globus/files/default/4396eb4d.0
+src/globus/provision/chef-files/cookbooks/globus/files/default/4396eb4d.signing_policy
+src/globus/provision/chef-files/cookbooks/globus/files/default/anon.cert
+src/globus/provision/chef-files/cookbooks/globus/files/default/anon.key
+src/globus/provision/chef-files/cookbooks/globus/files/default/d1b603c3.0
+src/globus/provision/chef-files/cookbooks/globus/files/default/d1b603c3.signing_policy
+src/globus/provision/chef-files/cookbooks/globus/files/default/gd-bundle_ca.cert
+src/globus/provision/chef-files/cookbooks/globus/files/default/gridftp.conf
+src/globus/provision/chef-files/cookbooks/globus/files/default/myproxy-server.config
+src/globus/provision/chef-files/cookbooks/globus/files/default/xinetd.myproxy
+src/globus/provision/chef-files/cookbooks/globus/recipes/client-tools.rb
+src/globus/provision/chef-files/cookbooks/globus/recipes/default.rb
+src/globus/provision/chef-files/cookbooks/globus/recipes/gc-cert.rb
+src/globus/provision/chef-files/cookbooks/globus/recipes/go_cert.rb
+src/globus/provision/chef-files/cookbooks/globus/recipes/gridftp-common.rb
+src/globus/provision/chef-files/cookbooks/globus/recipes/gridftp-default.rb
+src/globus/provision/chef-files/cookbooks/globus/recipes/gridftp-gc.rb
+src/globus/provision/chef-files/cookbooks/globus/recipes/myproxy.rb
+src/globus/provision/chef-files/cookbooks/globus/recipes/repository.rb
+src/globus/provision/chef-files/cookbooks/globus/templates/default/myproxy-dnmap.erb
+src/globus/provision/chef-files/cookbooks/globus/templates/default/xinetd.gram.erb
+src/globus/provision/chef-files/cookbooks/globus/templates/default/xinetd.gridftp.erb
+src/globus/provision/chef-files/cookbooks/java/README.md
+src/globus/provision/chef-files/cookbooks/java/metadata.json
+src/globus/provision/chef-files/cookbooks/java/metadata.rb
+src/globus/provision/chef-files/cookbooks/java/attributes/default.rb
+src/globus/provision/chef-files/cookbooks/java/files/default/java.seed
+src/globus/provision/chef-files/cookbooks/java/recipes/default.rb
+src/globus/provision/chef-files/cookbooks/java/recipes/openjdk.rb
+src/globus/provision/chef-files/cookbooks/java/recipes/sun.rb
+src/globus/provision/chef-files/cookbooks/postgresql/README.rdoc
+src/globus/provision/chef-files/cookbooks/postgresql/metadata.json
+src/globus/provision/chef-files/cookbooks/postgresql/metadata.rb
+src/globus/provision/chef-files/cookbooks/postgresql/attributes/default.rb
+src/globus/provision/chef-files/cookbooks/postgresql/recipes/client.rb
+src/globus/provision/chef-files/cookbooks/postgresql/recipes/default.rb
+src/globus/provision/chef-files/cookbooks/postgresql/recipes/server.rb
+src/globus/provision/chef-files/cookbooks/postgresql/recipes/server_debian.rb
+src/globus/provision/chef-files/cookbooks/postgresql/recipes/server_redhat.rb
+src/globus/provision/chef-files/cookbooks/postgresql/templates/default/debian.pg_hba.conf.erb
+src/globus/provision/chef-files/cookbooks/postgresql/templates/default/debian.postgresql.conf.erb
+src/globus/provision/chef-files/cookbooks/postgresql/templates/default/redhat.pg_hba.conf.erb
+src/globus/provision/chef-files/cookbooks/postgresql/templates/default/redhat.postgresql.conf.erb
+src/globus/provision/chef-files/cookbooks/provision/README.rdoc
+src/globus/provision/chef-files/cookbooks/provision/metadata.json
+src/globus/provision/chef-files/cookbooks/provision/metadata.rb
+src/globus/provision/chef-files/cookbooks/provision/attributes/default.rb
+src/globus/provision/chef-files/cookbooks/provision/files/default/auto.master
+src/globus/provision/chef-files/cookbooks/provision/files/default/grid-ca-ssl.conf
+src/globus/provision/chef-files/cookbooks/provision/files/default/nfs-common
+src/globus/provision/chef-files/cookbooks/provision/files/default/nfs-kernel-server
+src/globus/provision/chef-files/cookbooks/provision/files/default/nis
+src/globus/provision/chef-files/cookbooks/provision/recipes/ca.rb
+src/globus/provision/chef-files/cookbooks/provision/recipes/default.rb
+src/globus/provision/chef-files/cookbooks/provision/recipes/domain_users.rb
+src/globus/provision/chef-files/cookbooks/provision/recipes/ec2.rb
+src/globus/provision/chef-files/cookbooks/provision/recipes/gp_node.rb
+src/globus/provision/chef-files/cookbooks/provision/recipes/gridmap.rb
+src/globus/provision/chef-files/cookbooks/provision/recipes/hostcert.rb
+src/globus/provision/chef-files/cookbooks/provision/recipes/nfs_client.rb
+src/globus/provision/chef-files/cookbooks/provision/recipes/nfs_server.rb
+src/globus/provision/chef-files/cookbooks/provision/recipes/nis_client.rb
+src/globus/provision/chef-files/cookbooks/provision/recipes/nis_server.rb
+src/globus/provision/chef-files/cookbooks/provision/recipes/simpleca.rb
+src/globus/provision/chef-files/cookbooks/provision/templates/default/auto.home.erb
+src/globus/provision/chef-files/cookbooks/provision/templates/default/auto.nfs.erb
+src/globus/provision/chef-files/cookbooks/provision/templates/default/exports.erb
+src/globus/provision/chef-files/cookbooks/provision/templates/default/globus-ssl.conf.erb
+src/globus/provision/chef-files/cookbooks/provision/templates/default/grid-security.conf.erb
+src/globus/provision/chef-files/cookbooks/provision/templates/default/gridmap.erb
+src/globus/provision/chef-files/cookbooks/provision/templates/default/hosts.denyallow.erb
+src/globus/provision/chef-files/cookbooks/provision/templates/default/signing_policy.erb
+src/globus/provision/chef-files/cookbooks/provision/templates/default/ypserv.securenets.erb
+src/globus/provision/chef-files/roles/README.md
+src/globus/provision/chef-files/roles/domain-clusternode-condor.rb
+src/globus/provision/chef-files/roles/domain-condor.rb
+src/globus/provision/chef-files/roles/domain-gridftp-default.rb
+src/globus/provision/chef-files/roles/domain-gridftp-gc.rb
+src/globus/provision/chef-files/roles/domain-myproxy.rb
+src/globus/provision/chef-files/roles/domain-nfsnis-client.rb
+src/globus/provision/chef-files/roles/domain-nfsnis.rb
+src/globus/provision/chef-files/roles/globus.rb
+src/globus/provision/cli/__init__.py
+src/globus/provision/cli/api.py
+src/globus/provision/cli/ec2.py
+src/globus/provision/cli/globusonline.py
+src/globus/provision/common/__init__.py
+src/globus/provision/common/certs.py
+src/globus/provision/common/config.py
+src/globus/provision/common/defaults.py
+src/globus/provision/common/go_transfer.py
+src/globus/provision/common/log.py
+src/globus/provision/common/persistence.py
+src/globus/provision/common/ssh.py
+src/globus/provision/common/threads.py
+src/globus/provision/common/utils.py
+src/globus/provision/core/__init__.py
+src/globus/provision/core/api.py
+src/globus/provision/core/config.py
+src/globus/provision/core/deploy.py
+src/globus/provision/core/instance.py
+src/globus/provision/core/topology.py
+src/globus/provision/deploy/__init__.py
+src/globus/provision/deploy/dummy/__init__.py
+src/globus/provision/deploy/ec2/__init__.py
+src/globus/provision/deploy/ec2/images.py
+src/globus/provision/tests/__init__.py
+src/globus/provision/tests/common.py
+src/globus/provision/tests/test_samples.py
+src/globus_provision.egg-info/PKG-INFO
+src/globus_provision.egg-info/SOURCES.txt
+src/globus_provision.egg-info/dependency_links.txt
+src/globus_provision.egg-info/entry_points.txt
+src/globus_provision.egg-info/not-zip-safe
+src/globus_provision.egg-info/requires.txt
+src/globus_provision.egg-info/top_level.txt
+test/test_cli.py
+test/test_mt.py
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/dependency_links.txt
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/dependency_links.txt	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/dependency_links.txt	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1 @@
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/entry_points.txt
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/entry_points.txt	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/entry_points.txt	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,16 @@
+[console_scripts]
+gp-ec2-create-ami = globus.provision.cli.ec2:gp_ec2_create_ami_func
+gp-instance-add-user = globus.provision.cli.api:gp_instance_add_user_func
+gp-go-register-endpoints = globus.provision.cli.globusonline:gp_go_register_endpoints_func
+gp-instance-remove-hosts = globus.provision.cli.api:gp_instance_remove_hosts_func
+gp-instance-add-host = globus.provision.cli.api:gp_instance_add_host_func
+gp-instance-remove-users = globus.provision.cli.api:gp_instance_remove_users_func
+gp-instance-create = globus.provision.cli.api:gp_instance_create_func
+gp-instance-describe = globus.provision.cli.api:gp_instance_describe_func
+gp-instance-list = globus.provision.cli.api:gp_instance_list_func
+gp-instance-update = globus.provision.cli.api:gp_instance_update_func
+gp-instance-start = globus.provision.cli.api:gp_instance_start_func
+gp-ec2-update-ami = globus.provision.cli.ec2:gp_ec2_update_ami_func
+gp-instance-terminate = globus.provision.cli.api:gp_instance_terminate_func
+gp-instance-stop = globus.provision.cli.api:gp_instance_stop_func
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/not-zip-safe
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/not-zip-safe	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/not-zip-safe	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1 @@
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/requires.txt
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/requires.txt	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/requires.txt	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+boto>=2.0
+paramiko>=1.7.7.1
+colorama>=0.2.4
+pyOpenSSL>=0.10
+globusonline-transfer-api-client>=0.10.7
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/top_level.txt
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/top_level.txt	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/EGG-INFO/top_level.txt	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1 @@
+globus

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/__init__.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/__init__.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/__init__.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,15 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/__init__.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/__init__.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/__init__.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/__init__.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,29 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+Globus Provision is a tool for deploying fully-configured Globus systems on Amazon EC2
+
+See http://globus.org/provision/ for more details
+"""
+
+VERSION="0.3"
+RELEASE="0.3.2"
+AMI={"us-east-1":
+        {"32-bit": "ami-4f35f826",
+         "64-bit": "ami-375d905e",
+         "HVM": "ami-0b5d9062"}
+     }


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/__init__.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/README.md
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/README.md	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/README.md	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,8 @@
+Globus Provision Chef Cookbooks
+===============================
+
+These are the `Chef <http://www.opscode.com/chef/>`_ cookbooks for the 
+`Globus Provision <http://globus.org/provision/>`_ project. These cookbooks
+are not meant to be used on their own. Please refer to the Globus Provision
+documentation for instructions on how to deploy and configure a Globus
+system using these cookbooks.
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/README.md
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/README.md	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/README.md	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,109 @@
+Description
+===========
+
+Configures various APT components on Debian-like systems.  Also includes a LWRP.
+
+Recipes
+=======
+
+default
+-------
+The default recipe runs apt-get update during the Compile Phase of the Chef run to ensure that the system's package cache is updated with the latest. It is recommended that this recipe appear first in a node's run list (directly or through a role) to ensure that when installing packages, Chef will be able to download the latest version available on the remote APT repository.
+
+This recipe also sets up a local cache directory for preseeding packages.
+
+cacher
+------
+Installs the apt-cacher package and service so the system can provide APT caching. You can check the usage report at http://{hostname}:3142/report. The cacher recipe includes the `cacher-client` recipe, so it helps seed itself.
+
+cacher-client
+-------------
+Configures the node to use the apt-cacher server as a client.
+
+Resources/Providers
+===================
+
+This LWRP provides an easy way to manage additional APT repositories.
+
+# Actions
+
+- :add: creates a repository file and builds the repository listing
+- :remove: removes the repository file
+
+# Attribute Parameters
+
+- repo_name: name attribute. The name of the channel to discover
+- uri: the base of the Debian distribution
+- distribution: this is usually your release's codename...ie something like `karmic`, `lucid` or `maverick`
+- components: package groupings..when it doubt use `main`
+- deb_src: whether or not to add the repository as a source repo as well
+- key_server: the GPG keyserver where the key for the repo should be retrieved
+- key: if a `key_server` is provided, this is assumed to be the fingerprint, otherwise it is the URI to the GPG key for the repo
+
+# Example
+
+    # add the Zenoss repo
+    apt_repository "zenoss" do
+      uri "http://dev.zenoss.org/deb"
+      components ["main","stable"]
+      action :add
+    end
+    
+    # add the Nginx PPA; grab key from keyserver
+    apt_repository "nginx-php" do
+      uri "http://ppa.launchpad.net/nginx/php5/ubuntu"
+      distribution node['lsb']['codename']
+      components ["main"]
+      keyserver "keyserver.ubuntu.com"
+      key "C300EE8C"
+      action :add
+    end
+    
+    # add the Cloudkick Repo
+    apt_repository "cloudkick" do
+      uri "http://packages.cloudkick.com/ubuntu"
+      distribution node['lsb']['codename']
+      components ["main"]
+      key "http://packages.cloudkick.com/cloudkick.packages.key"
+      action :add
+    end
+    
+    # remove Zenoss repo
+    apt_repository "zenoss" do
+      action :remove
+    end
+    
+Usage
+=====
+
+Put `recipe[apt]` first in the run list. If you have other recipes that you want to use to configure how apt behaves, like new sources, notify the execute resource to run, e.g.:
+
+    template "/etc/apt/sources.list.d/my_apt_sources.list" do
+      notifies :run, resources(:execute => "apt-get update"), :immediately
+    end
+
+The above will run during execution phase since it is a normal template resource, and should appear before other package resources that need the sources in the template.
+
+Put `recipe[apt::cacher]` in the run_list for a server to provide APT caching and add `recipe[apt::cacher-client]` on the rest of the Debian-based nodes to take advantage of the caching server.
+
+License and Author
+==================
+
+Author:: Joshua Timberman (<joshua at opscode.com>)
+Author:: Matt Ray (<matt at opscode.com>)
+Author:: Seth Chisamore (<schisamo at opscode.com>)
+
+Copyright 2009-2011 Opscode, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/TODO.org
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/TODO.org	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/TODO.org	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,3 @@
+* remove proxy from /etc/apt/apt.conf if it's listed (from preseed install)
+* check contents of /etc/apt/apt.conf.d/01proxy
+* investigate apt-cacher-ng

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/files/default/apt-cacher
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/files/default/apt-cacher	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/files/default/apt-cacher	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,9 @@
+# apt-cacher startup configuration file
+
+# IMPORTANT: check the apt-cacher.conf file before using apt-cacher as daemon.
+
+# set to 1 to start the daemon at boot time
+AUTOSTART=1
+
+# extra settings to override the ones in apt-cacher.conf
+# EXTRAOPT=" daemon_port=3142 limit=30 "

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/files/default/apt-cacher.conf
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/files/default/apt-cacher.conf	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/files/default/apt-cacher.conf	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,144 @@
+# This file has been modified by ./apt-proxy-to-apt-cacher
+# Some lines may have been appended at the bottom of this file
+# This file has been modified by /usr/share/apt-cacher/apt-proxy-to-apt-cacher
+# Some lines may have been appended at the bottom of this file
+#################################################################
+# This is the config file for apt-cacher. On most Debian systems
+# you can safely leave the defaults alone.
+#################################################################
+
+# cache_dir is used to set the location of the local cache. This can
+# become quite large, so make sure it is somewhere with plenty of space.
+cache_dir=/var/cache/apt-cacher
+
+# The email address of the administrator is displayed in the info page
+# and traffic reports.
+admin_email=root at localhost
+
+# For the daemon startup settings please edit the file /etc/default/apt-cacher.
+
+# Daemon port setting, only useful in stand-alone mode. You need to run the
+# daemon as root to use privileged ports (<1024).
+daemon_port = 3142
+
+# optional settings, user and group to run the daemon as. Make sure they have
+# sufficient permissions on the cache and log directories. Comment the settings
+# to run apt-cacher as the native user.
+group=www-data
+user=www-data
+
+# optional setting, binds the listening daemon to one specified IP. Use IP
+# ranges for more advanced configuration, see below.
+# daemon_addr=localhost
+
+# If your apt-cacher machine is directly exposed to the Internet and you are
+# worried about unauthorised machines fetching packages through it, you can
+# specify a list of IPv4 addresses which are allowed to use it and another
+# list of IPv4 addresses which aren't.
+# Localhost (127.0.0.1) is always allowed. Other addresses must be matched
+# by allowed_hosts and not by denied_hosts to be permitted to use the cache.
+# Setting allowed_hosts to "*" means "allow all".
+# Otherwise the format is a comma-separated list containing addresses,
+# optionally with masks (like 10.0.0.0/22), or ranges of addresses (two
+# addresses separated by a hyphen, no masks, like '192.168.0.3-192.168.0.56').
+allowed_hosts=*
+denied_hosts=
+
+# And similiarly for IPv6 with allowed_hosts_6 and denied_hosts_6.
+# Note that IPv4-mapped IPv6 addresses (::ffff:w.x.y.z) are truncated to
+# w.x.y.z and are handled as IPv4.
+allowed_hosts_6=fec0::/16
+denied_hosts_6=
+
+# This thing can be done by Apache but is much simplier here - limit access to
+# Debian mirrors based on server names in the URLs
+#allowed_locations=ftp.uni-kl.de,ftp.nerim.net,debian.tu-bs.de
+
+# Apt-cacher can generate usage reports every 24 hours if you set this
+# directive to 1. You can view the reports in a web browser by pointing
+# to your cache machine with '/apt-cacher/report' on the end, like this:
+#      http://yourcache.example.com/apt-cacher/report
+# Generating reports is very fast even with many thousands of logfile
+# lines, so you can safely turn this on without creating much 
+# additional system load.
+generate_reports=1
+
+# Apt-cacher can clean up its cache directory every 24 hours if you set
+# this directive to 1. Cleaning the cache can take some time to run
+# (generally in the order of a few minutes) and removes all package
+# files that are not mentioned in any existing 'Packages' lists. This
+# has the effect of deleting packages that have been superseded by an
+# updated 'Packages' list.
+clean_cache=1
+
+# The directory to use for apt-cacher access and error logs.
+# The access log records every request in the format:
+# date-time|client ip address|HIT/MISS/EXPIRED|object size|object name
+# The error log is slightly more free-form, and is also used for debug
+# messages if debug mode is turned on.
+# Note that the old 'logfile' and 'errorfile' directives are
+# deprecated: if you set them explicitly they will be honoured, but it's
+# better to just get rid of them from old config files.
+logdir=/var/log/apt-cacher
+
+# apt-cacher can use different methods to decide whether package lists need to
+# be updated,
+# A) looking at the age of the cached files
+# B) getting HTTP header from server and comparing that with cached data. This
+# method is more reliable and avoids desynchronisation of data and index files
+# but needs to transfer few bytes from the server every time somebody requests
+# the files ("apt-get update")
+# Set the following value to the maximum age (in hours) for method A or to 0
+# for method B
+expire_hours=0
+
+# Apt-cacher can pass all its requests to an external http proxy like
+# Squid, which could be very useful if you are using an ISP that blocks
+# port 80 and requires all web traffic to go through its proxy. The
+# format is 'hostname:port', eg: 'proxy.example.com:8080'.
+http_proxy=proxy.example.com:8080
+
+# Use of an external proxy can be turned on or off with this flag.
+# Value should be either 0 (off) or 1 (on).
+use_proxy=0
+
+# External http proxy sometimes need authentication to get full access. The
+# format is 'username:password'.
+http_proxy_auth=proxyuser:proxypass
+
+# Use of external proxy authentication can be turned on or off with this flag.
+# Value should be either 0 (off) or 1 (on).
+use_proxy_auth=0
+
+# Rate limiting sets the maximum bandwidth in bytes per second to use
+# for fetching packages. Syntax is fully defined in 'man wget'.
+# Use 'k' or 'm' to use kilobits or megabits / second: eg, 'limit=25k'.
+# Use 0 or a negative value for no rate limiting.
+limit=0
+
+# Debug mode makes apt-cacher spew a lot of extra debug junk to the
+# error log (whose location is defined with the 'logdir' directive).
+# Leave this off unless you need it, or your error log will get very
+# big. Acceptable values are 0 or 1.
+debug=0
+
+# Adapt the line in the usage info web page to match your server configuration
+# example_sources_line=deb http://<b>my.cacher.server:3142/</b>ftp.au.debian.org/debian unstable main contrib non-free
+
+# Print a 410 (Gone) HTTP message with the specified text when accessed via
+# CGI. Useful to tell users to adapt their sources.list files when the
+# apt-cacher server is beeing relocated (via apt-get's error messages while
+# running "update")
+#cgi_advise_to_use = Please use http://cacheserver:3142/ as apt-cacher access URL
+#cgi_advise_to_use = Server relocated. To change sources.list, run perl -pe "s,/apt-cacher\??,:3142," -i /etc/apt/sources.list
+
+# Server mapping - this allows to hide real server names behind virtual paths
+# that appear in the access URL. This method is known from apt-proxy. This is
+# also the only method to use FTP access to the target hosts. The syntax is simple, the part of the beginning to replace, followed by a list of mirror urls, all space separated. Multiple profile are separated by semicolons
+# path_map = debian ftp.uni-kl.de/pub/linux/debian ftp2.de.debian.org/debian ; ubuntu archive.ubuntu.com/ubuntu ; security security.debian.org/debian-security ftp2.de.debian.org/debian-security
+# Note that you need to specify all target servers in the allowed_locations
+# options if you make use of it. Also note that the paths should not overlap
+# each other. FTP access method not supported yet, maybe in the future.
+
+# extra setting from apt-proxy configuration
+path_map =  ubuntu us.archive.ubuntu.com/ubuntu ; ubuntu-security security.ubuntu.com/ubuntu ; debian debian.osuosl.org/debian/ ; security security.debian.org/debian-security

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/files/default/apt-proxy-v2.conf
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/files/default/apt-proxy-v2.conf	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/files/default/apt-proxy-v2.conf	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,50 @@
+[DEFAULT]
+;; All times are in seconds, but you can add a suffix
+;; for minutes(m), hours(h) or days(d)
+
+;; commented out address so apt-proxy will listen on all IPs
+;; address = 127.0.0.1
+port = 9999
+cache_dir = /var/cache/apt-proxy
+
+;; Control files (Packages/Sources/Contents) refresh rate
+min_refresh_delay = 1s
+complete_clientless_downloads = 1
+
+;; Debugging settings.
+debug = all:4 db:0
+
+time = 30
+passive_ftp = on
+
+;;--------------------------------------------------------------
+;; Cache housekeeping
+
+cleanup_freq = 1d
+max_age = 120d
+max_versions = 3
+
+;;---------------------------------------------------------------
+;; Backend servers
+;;
+;; Place each server in its own [section]
+
+[ubuntu]
+; Ubuntu archive
+backends =
+        http://us.archive.ubuntu.com/ubuntu
+
+[ubuntu-security]
+; Ubuntu security updates
+backends = http://security.ubuntu.com/ubuntu
+
+[debian]
+;; Backend servers, in order of preference
+backends = 
+        http://debian.osuosl.org/debian/
+
+[security]
+;; Debian security archive
+backends = 
+        http://security.debian.org/debian-security
+        http://ftp2.de.debian.org/debian-security

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/metadata.json
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/metadata.json	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/metadata.json	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,34 @@
+{
+  "dependencies": {
+  },
+  "name": "apt",
+  "maintainer_email": "cookbooks at opscode.com",
+  "attributes": {
+  },
+  "license": "Apache 2.0",
+  "suggestions": {
+  },
+  "platforms": {
+    "debian": ">= 0.0.0",
+    "ubuntu": ">= 0.0.0"
+  },
+  "maintainer": "Opscode, Inc.",
+  "long_description": "Description\n===========\n\nConfigures various APT components on Debian-like systems.  Also includes a LWRP.\n\nRecipes\n=======\n\ndefault\n-------\nThe default recipe runs apt-get update during the Compile Phase of the Chef run to ensure that the system's package cache is updated with the latest. It is recommended that this recipe appear first in a node's run list (directly or through a role) to ensure that when installing packages, Chef will be able to download the latest version available on the remote APT repository.\n\nThis recipe also sets up a local cache directory for preseeding packages.\n\ncacher\n------\nInstalls the apt-cacher package and service so the system can provide APT caching. You can check the usage report at http://{hostname}:3142/report. The cacher recipe includes the `cacher-client` recipe, so it helps seed itself.\n\ncacher-client\n-------------\nConfigures the node to use the apt-cacher server as a client.\n\nResources/Provid
 ers\n===================\n\nThis LWRP provides an easy way to manage additional APT repositories.\n\n# Actions\n\n- :add: creates a repository file and builds the repository listing\n- :remove: removes the repository file\n\n# Attribute Parameters\n\n- repo_name: name attribute. The name of the channel to discover\n- uri: the base of the Debian distribution\n- distribution: this is usually your release's codename...ie something like `karmic`, `lucid` or `maverick`\n- components: package groupings..when it doubt use `main`\n- deb_src: whether or not to add the repository as a source repo as well\n- key_server: the GPG keyserver where the key for the repo should be retrieved\n- key: if a `key_server` is provided, this is assumed to be the fingerprint, otherwise it is the URI to the GPG key for the repo\n\n# Example\n\n    # add the Zenoss repo\n    apt_repository \"zenoss\" do\n      uri \"http://dev.zenoss.org/deb\"\n      components [\"main\",\"stable\"]\n      action :add\n
     end\n    \n    # add the Nginx PPA; grab key from keyserver\n    apt_repository \"nginx-php\" do\n      uri \"http://ppa.launchpad.net/nginx/php5/ubuntu\"\n      distribution node['lsb']['codename']\n      components [\"main\"]\n      keyserver \"keyserver.ubuntu.com\"\n      key \"C300EE8C\"\n      action :add\n    end\n    \n    # add the Cloudkick Repo\n    apt_repository \"cloudkick\" do\n      uri \"http://packages.cloudkick.com/ubuntu\"\n      distribution node['lsb']['codename']\n      components [\"main\"]\n      key \"http://packages.cloudkick.com/cloudkick.packages.key\"\n      action :add\n    end\n    \n    # remove Zenoss repo\n    apt_repository \"zenoss\" do\n      action :remove\n    end\n    \nUsage\n=====\n\nPut `recipe[apt]` first in the run list. If you have other recipes that you want to use to configure how apt behaves, like new sources, notify the execute resource to run, e.g.:\n\n    template \"/etc/apt/sources.list.d/my_apt_sources.list\" do\n   
    notifies :run, resources(:execute => \"apt-get update\"), :immediately\n    end\n\nThe above will run during execution phase since it is a normal template resource, and should appear before other package resources that need the sources in the template.\n\nPut `recipe[apt::cacher]` in the run_list for a server to provide APT caching and add `recipe[apt::cacher-client]` on the rest of the Debian-based nodes to take advantage of the caching server.\n\nLicense and Author\n==================\n\nAuthor:: Joshua Timberman (<joshua at opscode.com>)\nAuthor:: Matt Ray (<matt at opscode.com>)\nAuthor:: Seth Chisamore (<schisamo at opscode.com>)\n\nCopyright 2009-2011 Opscode, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under
  the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n",
+  "version": "1.1.2",
+  "recommendations": {
+  },
+  "recipes": {
+    "apt": "Runs apt-get update during compile phase and sets up preseed directories",
+    "apt::cacher-client": "Client for the apt::cacher server",
+    "apt::cacher": "Set up an APT cache"
+  },
+  "groupings": {
+  },
+  "conflicting": {
+  },
+  "replacing": {
+  },
+  "description": "Configures apt and apt services and an LWRP for managing apt repositories",
+  "providing": {
+  }
+}
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/metadata.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/metadata.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/metadata.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,13 @@
+maintainer        "Opscode, Inc."
+maintainer_email  "cookbooks at opscode.com"
+license           "Apache 2.0"
+description       "Configures apt and apt services and an LWRP for managing apt repositories"
+long_description  IO.read(File.join(File.dirname(__FILE__), 'README.md'))
+version           "1.1.2"
+recipe            "apt", "Runs apt-get update during compile phase and sets up preseed directories"
+recipe            "apt::cacher", "Set up an APT cache"
+recipe            "apt::cacher-client", "Client for the apt::cacher server"
+
+%w{ ubuntu debian }.each do |os|
+  supports os
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/providers/repository.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/providers/repository.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/providers/repository.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,72 @@
+#
+# Cookbook Name:: apt
+# Provider:: repository
+#
+# Copyright 2010-2011, Opscode, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+action :add do
+  unless ::File.exists?("/etc/apt/sources.list.d/#{new_resource.repo_name}-source.list")
+    Chef::Log.info "Adding #{new_resource.repo_name} repository to /etc/apt/sources.list.d/#{new_resource.repo_name}-source.list"
+    # add key
+    if new_resource.keyserver && new_resource.key
+      execute "install-key #{new_resource.key}" do
+        command "apt-key adv --keyserver #{new_resource.keyserver} --recv #{new_resource.key}"
+        action :nothing
+      end.run_action(:run)
+    elsif new_resource.key && (new_resource.key =~ /http/)
+      key_name = new_resource.key.split(/\//).last
+      remote_file "#{Chef::Config[:file_cache_path]}/#{key_name}" do
+        source new_resource.key
+        mode "0644"
+        action :nothing
+      end.run_action(:create_if_missing)
+      execute "install-key #{key_name}" do
+        command "apt-key add #{Chef::Config[:file_cache_path]}/#{key_name}"
+        action :nothing
+      end.run_action(:run)
+    end
+    # build our listing
+    repository = "deb"
+    repository = "deb-src" if new_resource.deb_src
+    repository = "# Created by the Chef apt_repository LWRP\n" + repository
+    repository += " #{new_resource.uri}"
+    repository += " #{new_resource.distribution}"
+    new_resource.components.each {|component| repository += " #{component}"}
+    # write out the file, replace it if it already exists
+    file "/etc/apt/sources.list.d/#{new_resource.repo_name}-source.list" do
+      owner "root"
+      group "root"
+      mode 0644
+      content repository + "\n"
+      action :nothing
+    end.run_action(:create)
+    execute "update package index" do
+      command "apt-get update"
+      action :nothing
+    end.run_action(:run)
+    new_resource.updated_by_last_action(true)
+  end
+end
+
+action :remove do
+  if ::File.exists?("/etc/apt/sources.list.d/#{new_resource.repo_name}-source.list")
+    Chef::Log.info "Removing #{new_resource.repo_name} repository from /etc/apt/sources.list.d/"
+    file "/etc/apt/sources.list.d/#{new_resource.repo_name}-source.list" do
+      action :delete
+    end
+    new_resource.updated_by_last_action(true)
+  end
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/recipes/cacher-client.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/recipes/cacher-client.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/recipes/cacher-client.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,44 @@
+#
+# Cookbook Name:: apt
+# Recipe:: cacher-client
+#
+# Copyright 2011, Opscode, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#remove Acquire::http::Proxy lines from /etc/apt/apt.conf since we use 01proxy
+#these are leftover from preseed installs
+execute "Remove proxy from /etc/apt/apt.conf" do
+  command "sed --in-place '/^Acquire::http::Proxy/d' /etc/apt/apt.conf"
+  only_if "grep Acquire::http::Proxy /etc/apt/apt.conf"
+end
+
+servers = search(:node, 'recipes:apt\:\:cacher') || []
+if servers.length > 0
+  Chef::Log.info("apt-cacher server found on #{servers[0]}.")
+  proxy = "Acquire::http::Proxy \"http://#{servers[0].ipaddress}:3142\";\n"
+  file "/etc/apt/apt.conf.d/01proxy" do
+    owner "root"
+    group "root"
+    mode "0644"
+    content proxy
+    action :create
+  end
+else
+  Chef::Log.info("No apt-cacher server found.")
+  file "/etc/apt/apt.conf.d/01proxy" do
+    action :delete
+    only_if {File.exists?("/etc/apt/apt.conf.d/01proxy")}
+  end
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/recipes/cacher.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/recipes/cacher.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/recipes/cacher.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,45 @@
+#
+# Cookbook Name:: apt
+# Recipe:: cacher
+#
+# Copyright 2008-2011, Opscode, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+package "apt-cacher" do
+  action :install
+end
+
+service "apt-cacher" do
+  supports :restart => true, :status => false
+  action [ :enable, :start ]
+end
+
+cookbook_file "/etc/apt-cacher/apt-cacher.conf" do
+  source "apt-cacher.conf"
+  owner "root"
+  group "root"
+  mode 0644
+  notifies :restart, resources(:service => "apt-cacher")
+end
+
+cookbook_file "/etc/default/apt-cacher" do
+  source "apt-cacher"
+  owner "root"
+  group "root"
+  mode 0644
+  notifies :restart, resources(:service => "apt-cacher")
+end
+
+#this will help seed the proxy
+include_recipe "apt::cacher-client"

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/recipes/default.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/recipes/default.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/recipes/default.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,33 @@
+#
+# Cookbook Name:: apt
+# Recipe:: default
+#
+# Copyright 2008-2009, Opscode, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+e = execute "apt-get update" do
+  action :nothing
+end
+
+e.run_action(:run)
+
+%w{/var/cache/local /var/cache/local/preseeding}.each do |dirname|
+  directory dirname do
+    owner "root"
+    group "root"
+    mode  0755
+    action :create
+  end
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/resources/repository.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/resources/repository.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/apt/resources/repository.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,30 @@
+#
+# Cookbook Name:: apt
+# Resource:: repository
+#
+# Copyright 2010-2011, Opscode, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+actions :add, :remove
+
+#name of the repo, used for source.list filename
+attribute :repo_name, :kind_of => String, :name_attribute => true
+attribute :uri, :kind_of => String
+attribute :distribution, :kind_of => String
+attribute :components, :kind_of => Array, :default => []
+#whether or not to add the repository as a source repo as well
+attribute :deb_src, :default => false
+attribute :keyserver, :kind_of => String, :default => nil
+attribute :key, :kind_of => String, :default => nil

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/README.rdoc
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/README.rdoc	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/README.rdoc	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+= DESCRIPTION:
+
+These recipes are used by Globus Provision; they are not meant to be used
+directly.  Please refer to the Globus Provision documentation for instructions 
+on how to deploy and configure a Globus system using these recipes.
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/files/default/condor-dir.conf
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/files/default/condor-dir.conf	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/files/default/condor-dir.conf	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,9 @@
+description	"Create Condor run directory"
+
+start on filesystem
+
+task
+script
+    mkdir -p /var/run/condor
+    chown condor.condor /var/run/condor
+end script

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/metadata.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/metadata.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/metadata.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,6 @@
+maintainer       "YOUR_COMPANY_NAME"
+maintainer_email "YOUR_EMAIL"
+license          "All rights reserved"
+description      "Installs/Configures condor"
+long_description IO.read(File.join(File.dirname(__FILE__), 'README.rdoc'))
+version          "0.0.1"

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/condor.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/condor.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/condor.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,54 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: Condor common actions
+##
+## This recipe is a dependency of ``condor_head`` and ``condor_worker``, which will set
+## up a Condor head node or worker node. This recipe handles all the actions
+## that are common to both.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+case node.platform
+when "ubuntu"
+
+  cookbook_file "/etc/init/condor-dir.conf" do
+    source "condor-dir.conf"
+    mode 0644
+    owner "root"
+    group "root"
+  end
+  
+end
+
+apt_repository "condor" do
+  uri "http://www.cs.wisc.edu/condor/debian/stable/"
+  distribution "lenny"
+  components ["contrib"]
+  action :add
+end
+
+package "condor" do
+  action :install
+  options "--force-yes"  
+end
+
+execute "update-rc.d condor defaults" do
+  user "root"
+  group "root"
+end  

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/condor_head.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/condor_head.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/condor_head.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,56 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: Condor head node
+##
+## Set up a Condor head node.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+gp_domain = node[:topology][:domains][node[:domain_id]]
+
+# The "condor" recipe handles actions that are common to
+# both head and worker nodes.
+include_recipe "condor::condor"
+
+
+# The lrm_head attribute is part of the generated topology.rb file,
+# and contains the FQDN of the head node.
+server = gp_domain[:lrm_head]
+
+
+# Domain (used by Condor for authorization). 
+# This should eventually be included in the topology.
+domain = server[server.index(".")+1, server.length]
+
+
+# Create the local configuration file.
+template "/etc/condor/condor_config.local" do
+  source "condor_config.erb"
+  mode 0644
+  owner "condor"
+  group "condor"
+  variables(
+    :server => server,
+    :domain => domain,    
+    :daemons => "COLLECTOR, MASTER, NEGOTIATOR, SCHEDD"
+  )
+  notifies :restart, "service[condor]"
+end
+
+service "condor" 

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/condor_worker.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/condor_worker.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/condor_worker.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,57 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: Condor worker node
+##
+## Set up a Condor worker node.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+gp_domain = node[:topology][:domains][node[:domain_id]]
+
+# The "condor" recipe handles actions that are common to
+# both head and worker nodes.
+include_recipe "condor::condor"
+
+
+# The lrm_head attribute is part of the generated topology.rb file,
+# and contains the FQDN of the head node.
+server = gp_domain[:lrm_head]
+
+
+# Domain (used by Condor for authorization). 
+# This should eventually be included in the topology.
+domain = server[server.index(".")+1, server.length]
+
+
+# Create the local configuration file.
+template "/etc/condor/condor_config.local" do
+  source "condor_config.erb"
+  mode 0644
+  owner "condor"
+  group "condor"
+  variables(
+    :server => server,
+    :domain => domain,    
+    :daemons => "MASTER, STARTD"
+  )
+  notifies :restart, "service[condor]"
+end
+
+service "condor" 
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/default.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/default.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/recipes/default.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,23 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# RECIPE: Default recipe.
+#
+# This cookbook has no default recipe.
+#
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/templates/default/condor_config.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/templates/default/condor_config.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/condor/templates/default/condor_config.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,49 @@
+##  What machine is your central manager?
+
+CONDOR_HOST = <%= @server %>
+
+
+##  Internet domain of machines sharing a common UID space.
+
+UID_DOMAIN = <%= @domain %>
+
+
+##  Internet domain of machines sharing a common file system.
+
+FILESYSTEM_DOMAIN = <%= @domain %>
+
+
+## Pool's short description
+
+COLLECTOR_NAME = DemoGrid Condor Pool
+
+
+##  When is this machine willing to start a job? 
+
+START = TRUE
+
+
+##  When to suspend a job?
+
+SUSPEND = FALSE
+
+
+##  When to nicely stop a job?
+##  (as opposed to killing it instantaneously)
+
+PREEMPT = FALSE
+
+
+##  When to instantaneously kill a preempting job
+##  (e.g. if a job is in the pre-empting stage for too long)
+
+KILL = FALSE
+
+
+##  This macro determines what daemons the condor_master will start and keep its watchful eyes on.
+##  The list is a comma or space separated list of subsystem names
+
+DAEMON_LIST = <%= @daemons %>
+
+ALLOW_READ = *.<%= @domain %>, 127.0.*
+ALLOW_WRITE = *.<%= @domain %>, 127.0.*

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/README.rdoc
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/README.rdoc	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/README.rdoc	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+= DESCRIPTION:
+
+These recipes are used by Globus Provision; they are not meant to be used
+directly.  Please refer to the Globus Provision documentation for instructions 
+on how to deploy and configure a Globus system using these recipes.
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/galaxy-setup.sh
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/galaxy-setup.sh	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/galaxy-setup.sh	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+cd `dirname $0`
+
+python ./scripts/check_python.py
+[ $? -ne 0 ] && exit 1
+
+SAMPLES="
+    external_service_types_conf.xml.sample
+    datatypes_conf.xml.sample
+    reports_wsgi.ini.sample
+    tool_conf.xml.sample
+    tool_data_table_conf.xml.sample
+    universe_wsgi.ini.sample
+    tool-data/shared/ucsc/builds.txt.sample
+    tool-data/*.sample
+    static/welcome.html.sample
+"
+
+# Create any missing config/location files
+for sample in $SAMPLES; do
+    file=`echo $sample | sed -e 's/\.sample$//'`
+    if [ ! -f "$file" -a -f "$sample" ]; then
+        echo "Initializing $file from `basename $sample`"
+        cp $sample $file
+    fi
+done
+
+# explicitly attempt to fetch eggs before running
+FETCH_EGGS=1
+for arg in "$@"; do
+    [ "$arg" = "--stop-daemon" ] && FETCH_EGGS=0; break
+done
+if [ $FETCH_EGGS -eq 1 ]; then
+    python ./scripts/check_eggs.py quiet
+    if [ $? -ne 0 ]; then
+        echo "Some eggs are out of date, attempting to fetch..."
+        python ./scripts/fetch_eggs.py
+        if [ $? -eq 0 ]; then
+            echo "Fetch successful."
+        else
+            echo "Fetch failed."
+            exit 1
+        fi
+    fi
+fi

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/galaxy.init
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/galaxy.init	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/galaxy.init	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+# Author: James Casbon, 2009
+
+### BEGIN INIT INFO
+# Provides:             galaxy
+# Required-Start:       $network $local_fs $mysql
+# Required-Stop:
+# Default-Start:        2 3 4 5
+# Default-Stop:         0 1 6
+# Short-Description:    Galaxy
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+USER="galaxy"
+GROUP="galaxy"
+DIR="/nfs/software/galaxy/"
+PYTHON="/usr/bin/python"
+OPTS="-ES ./scripts/paster.py serve --log-file /nfs/home/galaxy/galaxy.log universe_wsgi.ini"
+PIDFILE="/var/run/galaxy.pid"
+
+case "${1:-''}" in
+  'start')
+           log_daemon_msg "Starting Galaxy"
+           if start-stop-daemon --chuid $USER --group $GROUP --start --make-pidfile \
+	             --pidfile $PIDFILE --background --chdir $DIR --exec $PYTHON -- $OPTS; then
+             log_end_msg 0
+           else
+             log_end_msg 1
+	   fi
+
+        ;;
+  'stop')
+           log_daemon_msg "Stopping Galaxy" 
+	   if start-stop-daemon --stop --pidfile $PIDFILE; then
+	     log_end_msg 0
+	   else 
+	     log_end_msg 1
+	   fi
+        ;;
+  'restart')
+           # restart commands here
+	   $0 stop
+	   $0 start
+			   
+        ;;
+  *)      # no parameter specified
+        echo "Usage: $SELF start|stop|restart|reload|force-reload|status"
+        exit 1
+        ;;
+esac
+
+
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/universe_wsgi-globus.ini
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/universe_wsgi-globus.ini	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/universe_wsgi-globus.ini	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,574 @@
+#
+# Galaxy is configured by default to be useable in a single-user development
+# environment.  To tune the application for a multi-user production
+# environment, see the documentation at:
+#
+# http://bitbucket.org/galaxy/galaxy-central/wiki/Config/ProductionServer
+#
+
+# Throughout this sample configuration file, except where stated otherwise,
+# uncommented values override the default if left unset, whereas commented
+# values are set to the default value.
+# examples of many of these options are explained in more detail in the wiki:
+#
+# Config hackers are encouraged to check there before asking for help.
+
+# ---- HTTP Server ----------------------------------------------------------
+
+# Configuration of the internal HTTP server.
+
+[server:main]
+
+# The internal HTTP server to use.  Currently only Paste is provided.  This
+# option is required.
+use = egg:Paste#http
+
+# The port on which to listen.
+#port = 8080
+
+# The address on which to listen.  By default, only listen to localhost (Galaxy
+# will not be accessible over the network).  Use '0.0.0.0' to listen on all
+# available network interfaces.
+host = 0.0.0.0
+
+# Use a threadpool for the web server instead of creating a thread for each
+# request.
+use_threadpool = True
+
+# Number of threads in the web server thread pool.
+#threadpool_workers = 10
+
+# ---- Filters --------------------------------------------------------------
+
+# Filters sit between Galaxy and the HTTP server.
+
+# These filters are disabled by default.  They can be enabled with
+# 'filter-with' in the [app:main] section below.
+
+# Define the gzip filter.
+[filter:gzip]
+use = egg:Paste#gzip
+
+# Define the proxy-prefix filter.
+[filter:proxy-prefix]
+use = egg:PasteDeploy#prefix
+prefix = /galaxy
+
+# ---- Galaxy ---------------------------------------------------------------
+
+# Configuration of the Galaxy application.
+
+[app:main]
+
+# -- Application and filtering
+
+# The factory for the WSGI application.  This should not be changed.
+paste.app_factory = galaxy.web.buildapp:app_factory
+
+# If not running behind a proxy server, you may want to enable gzip compression
+# to decrease the size of data transferred over the network.  If using a proxy
+# server, please enable gzip compression there instead.
+#filter-with = gzip
+
+# If running behind a proxy server and Galaxy is served from a subdirectory,
+# enable the proxy-prefix filter and set the prefix in the
+# [filter:proxy-prefix] section above.
+#filter-with = proxy-prefix
+
+# If proxy-prefix is enabled and you're running more than one Galaxy instance
+# behind one hostname, you will want to set this to the same path as the prefix
+# in the filter above.  This value becomes the "path" attribute set in the
+# cookie so the cookies from each instance will not clobber each other.
+#cookie_path = None
+
+# -- Database
+
+# By default, Galaxy uses a SQLite database at 'database/universe.sqlite'.  You
+# may use a SQLAlchemy connection string to specify an external database
+# instead.  This string takes many options which are explained in detail in the
+# config file documentation.
+#database_connection = sqlite:///./database/universe.sqlite?isolation_level=IMMEDIATE
+
+# If the server logs errors about not having enough database pool connections,
+# you will want to increase these values, or consider running more Galaxy
+# processes.
+#database_engine_option_pool_size = 5
+#database_engine_option_max_overflow = 10
+
+# If using MySQL and the server logs the error "MySQL server has gone away",
+# you will want to set this to some positive value (7200 should work).
+#database_engine_option_pool_recycle = -1
+
+# If large database query results are causing memory or response time issues in
+# the Galaxy process, leave the result on the server instead.  This option is
+# only available for PostgreSQL and is highly recommended.
+#database_engine_option_server_side_cursors = False
+
+# Create only one connection to the database per thread, to reduce the
+# connection overhead.  Recommended when not using SQLite:
+#database_engine_option_strategy = threadlocal
+
+# Log all database transactions, can be useful for debugging and performance
+# profiling.  Logging is done via Python's 'logging' module under the qualname
+# 'galaxy.model.orm.logging_connection_proxy'
+#database_query_profiling_proxy = False
+
+# -- Files and directories
+
+# Dataset files are stored in this directory.
+#file_path = database/files
+
+# Temporary files are stored in this directory.
+#new_file_path = database/tmp
+
+# Tool config file, defines what tools are available in Galaxy.
+#tool_config_file = tool_conf.xml
+
+# Path to the directory containing the tools defined in the config.
+#tool_path = tools
+
+# Directory where data used by tools is located, see the samples in that
+# directory and the wiki for help:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/DataIntegration
+#tool_data_path = tool-data
+
+# Directory where chrom len files are kept, currently mainly used by trackster
+#len_file_path = tool-data/shared/ucsc/chrom
+
+
+# Datatypes config file, defines what data (file) types are available in
+# Galaxy.
+#datatypes_config_file = datatypes_conf.xml
+
+# Each job is given a unique empty directory as its current working directory.
+# This option defines in what parent directory those directories will be
+# created.
+#job_working_directory = database/job_working_directory
+
+# If using a cluster, Galaxy will write job scripts and stdout/stderr to this
+# directory.
+#cluster_files_directory = database/pbs
+
+# External service types config file, defines what types of external_services configurations 
+# are available in Galaxy.
+#external_service_type_config_file = external_service_types_conf.xml
+
+# Path to the directory containing the external_service_types defined in the config.
+#external_service_type_path = external_service_types
+
+# -- Mail and notification
+
+# Galaxy sends mail for various things: Subscribing users to the mailing list
+# if they request it, emailing password resets, notification from the Galaxy
+# Sample Tracking system, and reporting dataset errors.  To do this, it needs
+# to send mail through an SMTP server, which you may define here.
+#smtp_server = None
+
+# On the user registration form, users may choose to join the mailing list.
+# This is the address of the list they'll be subscribed to.
+#mailing_join_addr = galaxy-user-join at bx.psu.edu
+
+# Datasets in an error state include a link to report the error.  Those reports
+# will be sent to this address.  Error reports are disabled if no address is set.
+#error_email_to = None
+
+# -- Display sites
+
+# Galaxy can display data at various external browsers.  These options specify
+# which browsers should be available.  URLs and builds available at these
+# browsers are defined in the specifield files.
+
+# UCSC browsers: tool-data/shared/ucsc/ucsc_build_sites.txt
+#ucsc_display_sites = main,test,archaea,ucla
+
+# GBrowse servers: tool-data/shared/gbrowse/gbrowse_build_sites.txt
+#gbrowse_display_sites = wormbase,tair,modencode_worm,modencode_fly,yeast_sgd
+
+# GeneTrack servers: tool-data/shared/genetrack/genetrack_sites.txt
+#genetrack_display_sites = main,test
+
+# -- Next gen LIMS interface on top of existing Galaxy Sample/Request management code.
+
+use_nglims = False
+nglims_config_file = tool-data/nglims.yaml
+
+# -- UI Localization
+
+# Append "/{brand}" to the "Galaxy" text in the masthead.
+#brand = None
+
+# The URL linked by the "Galaxy/brand" text.
+#logo_url = /
+
+# The URL linked by the "Galaxy Wiki" link in the "Help" menu.
+#wiki_url = http://bitbucket.org/galaxy/galaxy-central/wiki
+
+# The URL linked by the "Email comments..." link in the "Help" menu.
+#bugs_email = mailto:galaxy-bugs at bx.psu.edu
+
+# The URL linked by the "How to Cite..." link in the "Help" menu.
+#citation_url = http://bitbucket.org/galaxy/galaxy-central/wiki/Citations
+
+# Serve static content, which must be enabled if you're not serving it via a
+# proxy server.  These options should be self explanatory and so are not
+# documented individually.  You can use these paths (or ones in the proxy
+# server) to point to your own styles.
+static_enabled = True
+static_cache_time = 360
+static_dir = %(here)s/static/
+static_images_dir = %(here)s/static/images
+static_favicon_dir = %(here)s/static/favicon.ico
+static_scripts_dir = %(here)s/static/scripts/
+static_style_dir = %(here)s/static/june_2007_style/blue
+
+# -- Advanced proxy features
+
+# For help on configuring the Advanced proxy features, see:
+# http://usegalaxy.org/production
+
+# Apache can handle file downloads (Galaxy-to-user) via mod_xsendfile.  Set
+# this to True to inform Galaxy that mod_xsendfile is enabled upstream.
+#apache_xsendfile = False
+
+# The same download handling can be done by nginx using X-Accel-Redirect.  This
+# should be set to the path defined in the nginx config as an internal redirect
+# with access to Galaxy's data files (see documentation linked above).
+#nginx_x_accel_redirect_base = False
+
+# nginx can make use of mod_zip to create zip files containing multiple library
+# files.  If using X-Accel-Redirect, this can be the same value as that option.
+#nginx_x_archive_files_base = False
+
+# If using compression in the upstream proxy server, use this option to disable
+# gzipping of library .tar.gz and .zip archives, since the proxy server will do
+# it faster on the fly.
+#upstream_gzip = False
+
+# nginx can also handle file uploads (user-to-Galaxy) via nginx_upload_module.
+# Configuration for this is complex and explained in detail in the
+# documentation linked above.  The upload store is a temporary directory in
+# which files uploaded by the upload module will be placed.
+#nginx_upload_store = False
+
+# This value overrides the action set on the file upload form, e.g. the web
+# path where the nginx_upload_module has been configured to intercept upload
+# requests.
+#nginx_upload_path = False
+
+# -- Logging and Debugging
+
+# Verbosity of console log messages.  Acceptable values can be found here:
+# http://docs.python.org/library/logging.html#logging-levels
+#log_level = DEBUG
+
+# Print database operations to the server log (warning, quite verbose!).
+#database_engine_option_echo = False
+
+# Print database pool operations to the server log (warning, quite verbose!).
+#database_engine_option_echo_pool = False
+
+# Turn on logging of application events and some user events to the database.
+#log_events = True
+
+# Turn on logging of user actions to the database. Actions currently logged are
+# grid views, tool searches, and use of "recently" used tools menu.  The
+# log_events and log_actions functionality will eventually be merged.
+#log_actions = True
+
+# Debug enables access to various config options useful for development and
+# debugging: use_lint, use_profile, use_printdebug and use_interactive.  It
+# also causes the files used by PBS/SGE (submission script, output, and error)
+# to remain on disk after the job is complete.  Debug mode is disabled if
+# commented, but is uncommented by default in the sample config.
+debug = True
+
+# Check for WSGI compliance.
+#use_lint = False
+
+# Run the Python profiler on each request.
+#use_profile = False
+
+# Intercept print statements and show them on the returned page.
+#use_printdebug = True
+
+# Enable live debugging in your browser.  This should NEVER be enabled on a
+# public site.  Enabled in the sample config for development.
+use_interactive = True
+
+# Write thread status periodically to 'heartbeat.log',  (careful, uses disk
+# space rapidly!).  Useful to determine why your processes may be consuming a
+# lot of CPU.
+#use_heartbeat = False
+
+# Enable the memory debugging interface (careful, negatively impacts server
+# performance).
+#use_memdump = False
+
+# -- Data Libraries
+
+# These library upload options are described in much more detail in the wiki:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/DataLibraries/UploadingFiles
+
+# Add an option to the library upload form which allows administrators to
+# upload a directory of files.
+library_import_dir = True
+
+# Add an option to the library upload form which allows authorized
+# non-administrators to upload a directory of files.  The configured directory
+# must contain sub-directories named the same as the non-admin user's Galaxy
+# login ( email ).  The non-admin user is restricted to uploading files or
+# sub-directories of files contained in their directory.
+#user_library_import_dir = None
+
+# Add an option to the admin library upload tool allowing admins to paste
+# filesystem paths to files and directories in a box, and these paths will be
+# added to a library.  Set to True to enable.  Please note the security
+# implication that this will give Galaxy Admins access to anything your Galaxy
+# user has access to.
+allow_library_path_paste = True
+
+# Users may choose to download multiple files from a library in an archive.  By
+# default, Galaxy allows users to select from a few different archive formats
+# if testing shows that Galaxy is able to create files using these formats.
+# Specific formats can be disabled with this option, separate more than one
+# format with commas.  Available formats are currently 'zip', 'gz', and 'bz2'.
+#disable_library_comptypes = 
+
+# Some sequencer integration features in beta allow you to automatically
+# transfer datasets.  This is done using a lightweight transfer manager which
+# runs outside of Galaxy (but is spawned by it automatically).  Galaxy will
+# communicate with this manager over the port specified here.
+#transfer_manager_port = 8163
+
+# Search data libraries with whoosh
+#enable_whoosh_library_search = True
+# Whoosh indexes are stored in this directory.
+#whoosh_index_dir = database/whoosh_indexes
+
+# Search data libraries with lucene
+#enable_lucene_library_search = False
+# maxiumum file size to index for searching, in MB
+#fulltext_max_size = 500
+#fulltext_noindex_filetypes=bam,sam,wig,bigwig,fasta,fastq,fastqsolexa,fastqillumina,fastqsanger
+# base URL of server providing search functionality using lucene
+#fulltext_url = http://localhost:8081
+
+# -- Users and Security
+
+# Galaxy encodes various internal values when these values will be output in
+# some format (for example, in a URL or cookie).  You should set a key to be
+# used by the algorithm that encodes and decodes these values.  It can be any
+# string.  If left unchanged, anyone could construct a cookie that would grant
+# them access to others' sessions.
+#id_secret = USING THE DEFAULT IS NOT SECURE!
+
+# User authentication can be delegated to an upstream proxy server (usually
+# Apache).  The upstream proxy should set a REMOTE_USER header in the request.
+# Enabling remote user disables regular logins.  For more information, see:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/Config/ApacheProxy
+#use_remote_user = False
+
+# If use_remote_user is enabled and your external authentication
+# method just returns bare usernames, set a default mail domain to be appended
+# to usernames, to become your Galaxy usernames (email addresses).
+#remote_user_maildomain = None
+
+# If use_remote_user is enabled, you can set this to a URL that will log your
+# users out.
+#remote_user_logout_href = None
+
+# Administrative users - set this to a comma-separated list of valid Galaxy
+# users (email addresses).  These users will have access to the Admin section
+# of the server, and will have access to create users, groups, roles,
+# libraries, and more.  For more information, see:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/Admin/AdminInterface
+admin_users = steder at ci.uchicago.edu,borja at cs.uchicago.edu,madduri at mcs.anl.gov,ballen at ci.uchicago.edu
+
+# Force everyone to log in (disable anonymous access).
+#require_login = False
+
+# Allow unregistered users to create new accounts (otherwise, they will have to
+# be created by an admin).
+#allow_user_creation = True
+
+# Allow administrators to delete accounts.
+#allow_user_deletion = False
+
+# By default, users' data will be public, but setting this to True will cause
+# it to be private.  Does not affect existing users and data, only ones created
+# after this option is set.  Users may still change their default back to
+# public.
+#new_user_dataset_access_role_default_private = False
+
+# -- Beta features
+
+# Enable Galaxy to communicate directly with a sequencer
+#enable_sequencer_communication = False
+
+# Enable Galaxy's built-in visualization module, Trackster.
+#enable_tracks = False
+
+# Enable Galaxy Pages. Pages are custom webpages that include embedded Galaxy items, 
+# such as datasets, histories, workflows, and visualizations; pages are useful for 
+# documenting and sharing multiple analyses or workflows. Pages are created using a 
+# WYSIWYG editor that is very similar to a word processor.
+#enable_pages = False
+
+# Enable authentication via OpenID.  Allows users to log in to their Galaxy
+# account by authenticating with an OpenID provider.
+enable_openid = True
+
+# Enable the (experimental! beta!) Web API.  Documentation forthcoming.
+#enable_api = False
+
+# Enable Galaxy's "Upload via FTP" interface.  You'll need to install and
+# configure an FTP server (we've used ProFTPd since it can use Galaxy's
+# database for authentication) and set the following two options.
+
+# This should point to a directory containing subdirectories matching users'
+# email addresses, where Galaxy will look for files.
+ftp_upload_dir = /nfs/scratch
+
+# this value changes how the user_ftp_dir is determined:
+#  - normally it is set by doing os.path.join(ftp_upload_dir, user.email)
+#  - with globus we want to do os.path.join(ftp_upload_dir, user.username)
+globus_online = True
+
+# The endpoint to use when doing globus transfers onto the galaxy machine:
+globus_endpoint = "borja#galaxy"
+
+# home directory root:
+# normally this is /home
+# As a hack I'm looking for credential files in a users home directory
+home_root = /nfs/home
+
+# globus cert settings:
+# globus expects the user home directory to contain a user key and user cert:
+globus_userkey = .globus/userkey.pem
+globus_usercert = .globus/usercert.pem
+# you also need to specify the path to your root certificate:
+globus_rootcert = /etc/grid-security/certificates/d1b603c3.0
+
+# When we want to transfer files back with globus online we symbolicly
+# link those datasets from galaxy's home dir into something readable
+# by globus.
+#
+globus_scratch = /nfs/scratch
+
+# This should be the hostname of your FTP server, which will be provided to
+# users in the help text.
+ftp_upload_site = "go://borja#galaxy3"
+
+# -- Job Execution
+
+# If running multiple Galaxy processes, one can be designated as the job
+# runner.  For more information, see:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/Config/WebApplicationScaling
+#enable_job_running = True
+
+# Should jobs be tracked through the database, rather than in memory.
+# Necessary if you're running the load balanced setup.
+#track_jobs_in_database = False
+
+# This enables splitting of jobs into tasks, if specified by the particular tool config.
+# This is a new feature and not recommended for production servers yet.
+#use_tasked_jobs = False
+#local_task_queue_workers = 2
+
+# Enable job recovery (if Galaxy is restarted while cluster jobs are running,
+# it can "recover" them when it starts).  This is not safe to use if you are
+# running more than one Galaxy server using the same database.
+#enable_job_recovery = True
+
+# Setting metadata on job outputs to in a separate process (or if using a
+# cluster, on the cluster).  Thanks to Python's Global Interpreter Lock and the
+# hefty expense that setting metadata incurs, your Galaxy process may become
+# unresponsive when this operation occurs internally.
+#set_metadata_externally = False
+
+# Although it is fairly reliable, setting metadata can occasionally fail.  In
+# these instances, you can choose to retry setting it internally or leave it in
+# a failed state (since retrying internally may cause the Galaxy process to be
+# unresponsive).  If this option is set to False, the user will be given the
+# option to retry externally, or set metadata manually (when possible).
+#retry_metadata_internally = True
+
+# If (for example) you run on a cluster and your datasets (by default,
+# database/files/) are mounted read-only, this option will override tool output
+# paths to write outputs to the working directory instead, and the job manager
+# will move the outputs to their proper place in the dataset directory on the
+# Galaxy server after the job completes.
+#outputs_to_working_directory = False
+
+# Number of concurrent jobs to run (local job runner)
+#local_job_queue_workers = 5
+
+# Jobs can be killed after a certain amount of execution time.  Format is in
+# hh:mm:ss.  Currently only implemented for PBS.
+#job_walltime = None
+
+# Jobs can be killed if any of their outputs grow over a certain size (in
+# bytes).  0 for no limit.
+#output_size_limit = 0
+
+# Clustering Galaxy is not a straightforward process and requires some
+# pre-configuration.  See the the wiki before attempting to set any of these
+# options:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/Config/Cluster
+
+# Comma-separated list of job runners to start.  local is always started.  If
+# left commented, no jobs will be run on the cluster, even if a cluster URL is
+# explicitly defined in the [galaxy:tool_runners] section below.  The runners
+# currently available are 'pbs' and 'drmaa'.
+#start_job_runners = None
+
+# The URL for the default runner to use when a tool doesn't explicitly define a
+# runner below.
+#default_cluster_job_runner = local:///
+
+# The cluster runners have their own thread pools used to prepare and finish
+# jobs (so that these sometimes lengthy operations do not block normal queue
+# operation).  The value here is the number of worker threads available to each
+# started runner.
+#cluster_job_queue_workers = 3
+
+# These options are only used when using file staging with PBS.
+#pbs_application_server = 
+#pbs_stage_path = 
+#pbs_dataset_server = 
+
+# ---- Tool Job Runners -----------------------------------------------------
+
+# Individual per-tool job runner overrides.  If not listed here, a tool will
+# run with the runner defined with default_cluster_job_runner.
+
+[galaxy:tool_runners]
+
+biomart = local:///
+encode_db1 = local:///
+hbvar = local:///
+microbial_import1 = local:///
+ucsc_table_direct1 = local:///
+ucsc_table_direct_archaea1 = local:///
+ucsc_table_direct_test1 = local:///
+upload1 = local:///
+
+# ---- Galaxy Message Queue -------------------------------------------------
+
+# Galaxy uses AMQ protocol to receive messages from external sources like 
+# bar code scanners. Galaxy has been tested against RabbitMQ AMQP implementation.
+# For Galaxy to receive messages from a message queue the RabbitMQ server has 
+# to be set up with a user account and other parameters listed below. The 'host'
+# and 'port' fields should point to where the RabbitMQ server is running. 
+
+[galaxy_amqp]
+
+#host = 127.0.0.1
+#port = 5672
+#userid = galaxy
+#password = galaxy
+#virtual_host = galaxy_messaging_engine
+#queue = galaxy_queue
+#exchange = galaxy_exchange
+#routing_key = bar_code_scanner
+#rabbitmqctl_path = /path/to/rabbitmqctl 
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/universe_wsgi.ini
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/universe_wsgi.ini	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/files/default/universe_wsgi.ini	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,548 @@
+#
+# Galaxy is configured by default to be useable in a single-user development
+# environment.  To tune the application for a multi-user production
+# environment, see the documentation at:
+#
+# http://bitbucket.org/galaxy/galaxy-central/wiki/Config/ProductionServer
+#
+
+# Throughout this sample configuration file, except where stated otherwise,
+# uncommented values override the default if left unset, whereas commented
+# values are set to the default value.
+# examples of many of these options are explained in more detail in the wiki:
+#
+# Config hackers are encouraged to check there before asking for help.
+
+# ---- HTTP Server ----------------------------------------------------------
+
+# Configuration of the internal HTTP server.
+
+[server:main]
+
+# The internal HTTP server to use.  Currently only Paste is provided.  This
+# option is required.
+use = egg:Paste#http
+
+# The port on which to listen.
+#port = 8080
+
+# The address on which to listen.  By default, only listen to localhost (Galaxy
+# will not be accessible over the network).  Use '0.0.0.0' to listen on all
+# available network interfaces.
+host = 0.0.0.0
+
+# Use a threadpool for the web server instead of creating a thread for each
+# request.
+use_threadpool = True
+
+# Number of threads in the web server thread pool.
+#threadpool_workers = 10
+
+# ---- Filters --------------------------------------------------------------
+
+# Filters sit between Galaxy and the HTTP server.
+
+# These filters are disabled by default.  They can be enabled with
+# 'filter-with' in the [app:main] section below.
+
+# Define the gzip filter.
+[filter:gzip]
+use = egg:Paste#gzip
+
+# Define the proxy-prefix filter.
+[filter:proxy-prefix]
+use = egg:PasteDeploy#prefix
+prefix = /galaxy
+
+# ---- Galaxy ---------------------------------------------------------------
+
+# Configuration of the Galaxy application.
+
+[app:main]
+
+# -- Application and filtering
+
+# The factory for the WSGI application.  This should not be changed.
+paste.app_factory = galaxy.web.buildapp:app_factory
+
+# If not running behind a proxy server, you may want to enable gzip compression
+# to decrease the size of data transferred over the network.  If using a proxy
+# server, please enable gzip compression there instead.
+#filter-with = gzip
+
+# If running behind a proxy server and Galaxy is served from a subdirectory,
+# enable the proxy-prefix filter and set the prefix in the
+# [filter:proxy-prefix] section above.
+#filter-with = proxy-prefix
+
+# If proxy-prefix is enabled and you're running more than one Galaxy instance
+# behind one hostname, you will want to set this to the same path as the prefix
+# in the filter above.  This value becomes the "path" attribute set in the
+# cookie so the cookies from each instance will not clobber each other.
+#cookie_path = None
+
+# -- Database
+
+# By default, Galaxy uses a SQLite database at 'database/universe.sqlite'.  You
+# may use a SQLAlchemy connection string to specify an external database
+# instead.  This string takes many options which are explained in detail in the
+# config file documentation.
+#database_connection = sqlite:///./database/universe.sqlite?isolation_level=IMMEDIATE
+
+# If the server logs errors about not having enough database pool connections,
+# you will want to increase these values, or consider running more Galaxy
+# processes.
+#database_engine_option_pool_size = 5
+#database_engine_option_max_overflow = 10
+
+# If using MySQL and the server logs the error "MySQL server has gone away",
+# you will want to set this to some positive value (7200 should work).
+#database_engine_option_pool_recycle = -1
+
+# If large database query results are causing memory or response time issues in
+# the Galaxy process, leave the result on the server instead.  This option is
+# only available for PostgreSQL and is highly recommended.
+#database_engine_option_server_side_cursors = False
+
+# Create only one connection to the database per thread, to reduce the
+# connection overhead.  Recommended when not using SQLite:
+#database_engine_option_strategy = threadlocal
+
+# Log all database transactions, can be useful for debugging and performance
+# profiling.  Logging is done via Python's 'logging' module under the qualname
+# 'galaxy.model.orm.logging_connection_proxy'
+#database_query_profiling_proxy = False
+
+# -- Files and directories
+
+# Dataset files are stored in this directory.
+#file_path = database/files
+
+# Temporary files are stored in this directory.
+#new_file_path = database/tmp
+
+# Tool config file, defines what tools are available in Galaxy.
+#tool_config_file = tool_conf.xml
+
+# Path to the directory containing the tools defined in the config.
+#tool_path = tools
+
+# Directory where data used by tools is located, see the samples in that
+# directory and the wiki for help:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/DataIntegration
+#tool_data_path = tool-data
+
+# Directory where chrom len files are kept, currently mainly used by trackster
+#len_file_path = tool-data/shared/ucsc/chrom
+
+
+# Datatypes config file, defines what data (file) types are available in
+# Galaxy.
+#datatypes_config_file = datatypes_conf.xml
+
+# Each job is given a unique empty directory as its current working directory.
+# This option defines in what parent directory those directories will be
+# created.
+#job_working_directory = database/job_working_directory
+
+# If using a cluster, Galaxy will write job scripts and stdout/stderr to this
+# directory.
+#cluster_files_directory = database/pbs
+
+# External service types config file, defines what types of external_services configurations 
+# are available in Galaxy.
+#external_service_type_config_file = external_service_types_conf.xml
+
+# Path to the directory containing the external_service_types defined in the config.
+#external_service_type_path = external_service_types
+
+# -- Mail and notification
+
+# Galaxy sends mail for various things: Subscribing users to the mailing list
+# if they request it, emailing password resets, notification from the Galaxy
+# Sample Tracking system, and reporting dataset errors.  To do this, it needs
+# to send mail through an SMTP server, which you may define here.
+#smtp_server = None
+
+# On the user registration form, users may choose to join the mailing list.
+# This is the address of the list they'll be subscribed to.
+#mailing_join_addr = galaxy-user-join at bx.psu.edu
+
+# Datasets in an error state include a link to report the error.  Those reports
+# will be sent to this address.  Error reports are disabled if no address is set.
+#error_email_to = None
+
+# -- Display sites
+
+# Galaxy can display data at various external browsers.  These options specify
+# which browsers should be available.  URLs and builds available at these
+# browsers are defined in the specifield files.
+
+# UCSC browsers: tool-data/shared/ucsc/ucsc_build_sites.txt
+#ucsc_display_sites = main,test,archaea,ucla
+
+# GBrowse servers: tool-data/shared/gbrowse/gbrowse_build_sites.txt
+#gbrowse_display_sites = wormbase,tair,modencode_worm,modencode_fly
+
+# GeneTrack servers: tool-data/shared/genetrack/genetrack_sites.txt
+#genetrack_display_sites = main,test
+
+# -- Next gen LIMS interface on top of existing Galaxy Sample/Request management code.
+
+use_nglims = False
+nglims_config_file = tool-data/nglims.yaml
+
+# -- UI Localization
+
+# Append "/{brand}" to the "Galaxy" text in the masthead.
+#brand = None
+
+# The URL linked by the "Galaxy/brand" text.
+#logo_url = /
+
+# The URL linked by the "Galaxy Wiki" link in the "Help" menu.
+#wiki_url = http://bitbucket.org/galaxy/galaxy-central/wiki
+
+# The URL linked by the "Email comments..." link in the "Help" menu.
+#bugs_email = mailto:galaxy-bugs at bx.psu.edu
+
+# The URL linked by the "How to Cite..." link in the "Help" menu.
+#citation_url = http://bitbucket.org/galaxy/galaxy-central/wiki/Citations
+
+# Serve static content, which must be enabled if you're not serving it via a
+# proxy server.  These options should be self explanatory and so are not
+# documented individually.  You can use these paths (or ones in the proxy
+# server) to point to your own styles.
+static_enabled = True
+static_cache_time = 360
+static_dir = %(here)s/static/
+static_images_dir = %(here)s/static/images
+static_favicon_dir = %(here)s/static/favicon.ico
+static_scripts_dir = %(here)s/static/scripts/
+static_style_dir = %(here)s/static/june_2007_style/blue
+
+# -- Advanced proxy features
+
+# For help on configuring the Advanced proxy features, see:
+# http://usegalaxy.org/production
+
+# Apache can handle file downloads (Galaxy-to-user) via mod_xsendfile.  Set
+# this to True to inform Galaxy that mod_xsendfile is enabled upstream.
+#apache_xsendfile = False
+
+# The same download handling can be done by nginx using X-Accel-Redirect.  This
+# should be set to the path defined in the nginx config as an internal redirect
+# with access to Galaxy's data files (see documentation linked above).
+#nginx_x_accel_redirect_base = False
+
+# nginx can make use of mod_zip to create zip files containing multiple library
+# files.  If using X-Accel-Redirect, this can be the same value as that option.
+#nginx_x_archive_files_base = False
+
+# If using compression in the upstream proxy server, use this option to disable
+# gzipping of library .tar.gz and .zip archives, since the proxy server will do
+# it faster on the fly.
+#upstream_gzip = False
+
+# nginx can also handle file uploads (user-to-Galaxy) via nginx_upload_module.
+# Configuration for this is complex and explained in detail in the
+# documentation linked above.  The upload store is a temporary directory in
+# which files uploaded by the upload module will be placed.
+#nginx_upload_store = False
+
+# This value overrides the action set on the file upload form, e.g. the web
+# path where the nginx_upload_module has been configured to intercept upload
+# requests.
+#nginx_upload_path = False
+
+# -- Logging and Debugging
+
+# Verbosity of console log messages.  Acceptable values can be found here:
+# http://docs.python.org/library/logging.html#logging-levels
+#log_level = DEBUG
+
+# Print database operations to the server log (warning, quite verbose!).
+#database_engine_option_echo = False
+
+# Print database pool operations to the server log (warning, quite verbose!).
+#database_engine_option_echo_pool = False
+
+# Turn on logging of application events and some user events to the database.
+#log_events = True
+
+# Turn on logging of user actions to the database. Actions currently logged are
+# grid views, tool searches, and use of "recently" used tools menu.  The
+# log_events and log_actions functionality will eventually be merged.
+#log_actions = True
+
+# Debug enables access to various config options useful for development and
+# debugging: use_lint, use_profile, use_printdebug and use_interactive.  It
+# also causes the files used by PBS/SGE (submission script, output, and error)
+# to remain on disk after the job is complete.  Debug mode is disabled if
+# commented, but is uncommented by default in the sample config.
+debug = True
+
+# Check for WSGI compliance.
+#use_lint = False
+
+# Run the Python profiler on each request.
+#use_profile = False
+
+# Intercept print statements and show them on the returned page.
+#use_printdebug = True
+
+# Enable live debugging in your browser.  This should NEVER be enabled on a
+# public site.  Enabled in the sample config for development.
+use_interactive = True
+
+# Write thread status periodically to 'heartbeat.log',  (careful, uses disk
+# space rapidly!).  Useful to determine why your processes may be consuming a
+# lot of CPU.
+#use_heartbeat = False
+
+# Enable the memory debugging interface (careful, negatively impacts server
+# performance).
+#use_memdump = False
+
+# -- Data Libraries
+
+# These library upload options are described in much more detail in the wiki:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/DataLibraries/UploadingFiles
+
+# Add an option to the library upload form which allows administrators to
+# upload a directory of files.
+#library_import_dir = None
+
+# Add an option to the library upload form which allows authorized
+# non-administrators to upload a directory of files.  The configured directory
+# must contain sub-directories named the same as the non-admin user's Galaxy
+# login ( email ).  The non-admin user is restricted to uploading files or
+# sub-directories of files contained in their directory.
+#user_library_import_dir = None
+
+# Add an option to the admin library upload tool allowing admins to paste
+# filesystem paths to files and directories in a box, and these paths will be
+# added to a library.  Set to True to enable.  Please note the security
+# implication that this will give Galaxy Admins access to anything your Galaxy
+# user has access to.
+#allow_library_path_paste = False
+
+# Users may choose to download multiple files from a library in an archive.  By
+# default, Galaxy allows users to select from a few different archive formats
+# if testing shows that Galaxy is able to create files using these formats.
+# Specific formats can be disabled with this option, separate more than one
+# format with commas.  Available formats are currently 'zip', 'gz', and 'bz2'.
+#disable_library_comptypes = 
+
+# Some sequencer integration features in beta allow you to automatically
+# transfer datasets.  This is done using a lightweight transfer manager which
+# runs outside of Galaxy (but is spawned by it automatically).  Galaxy will
+# communicate with this manager over the port specified here.
+#transfer_manager_port = 8163
+
+# Search data libraries with whoosh
+#enable_whoosh_library_search = True
+# Whoosh indexes are stored in this directory.
+#whoosh_index_dir = database/whoosh_indexes
+
+# Search data libraries with lucene
+#enable_lucene_library_search = False
+# maxiumum file size to index for searching, in MB
+#fulltext_max_size = 500
+#fulltext_noindex_filetypes=bam,sam,wig,bigwig,fasta,fastq,fastqsolexa,fastqillumina,fastqsanger
+# base URL of server providing search functionality using lucene
+#fulltext_url = http://localhost:8081
+
+# -- Users and Security
+
+# Galaxy encodes various internal values when these values will be output in
+# some format (for example, in a URL or cookie).  You should set a key to be
+# used by the algorithm that encodes and decodes these values.  It can be any
+# string.  If left unchanged, anyone could construct a cookie that would grant
+# them access to others' sessions.
+#id_secret = USING THE DEFAULT IS NOT SECURE!
+
+# User authentication can be delegated to an upstream proxy server (usually
+# Apache).  The upstream proxy should set a REMOTE_USER header in the request.
+# Enabling remote user disables regular logins.  For more information, see:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/Config/ApacheProxy
+#use_remote_user = False
+
+# If use_remote_user is enabled and your external authentication
+# method just returns bare usernames, set a default mail domain to be appended
+# to usernames, to become your Galaxy usernames (email addresses).
+#remote_user_maildomain = None
+
+# If use_remote_user is enabled, you can set this to a URL that will log your
+# users out.
+#remote_user_logout_href = None
+
+# Administrative users - set this to a comma-separated list of valid Galaxy
+# users (email addresses).  These users will have access to the Admin section
+# of the server, and will have access to create users, groups, roles,
+# libraries, and more.  For more information, see:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/Admin/AdminInterface
+#admin_users = None
+
+# Force everyone to log in (disable anonymous access).
+#require_login = False
+
+# Allow unregistered users to create new accounts (otherwise, they will have to
+# be created by an admin).
+#allow_user_creation = True
+
+# Allow administrators to delete accounts.
+#allow_user_deletion = False
+
+# By default, users' data will be public, but setting this to True will cause
+# it to be private.  Does not affect existing users and data, only ones created
+# after this option is set.  Users may still change their default back to
+# public.
+#new_user_dataset_access_role_default_private = False
+
+# -- Beta features
+
+# Enable Galaxy to communicate directly with a sequencer
+#enable_sequencer_communication = False
+
+# Enable Galaxy's built-in visualization module, Trackster.
+#enable_tracks = False
+
+# Enable Galaxy Pages. Pages are custom webpages that include embedded Galaxy items, 
+# such as datasets, histories, workflows, and visualizations; pages are useful for 
+# documenting and sharing multiple analyses or workflows. Pages are created using a 
+# WYSIWYG editor that is very similar to a word processor.
+#enable_pages = False
+
+# Enable authentication via OpenID.  Allows users to log in to their Galaxy
+# account by authenticating with an OpenID provider.
+#enable_openid = False
+
+# Enable the (experimental! beta!) Web API.  Documentation forthcoming.
+#enable_api = False
+
+# Enable Galaxy's "Upload via FTP" interface.  You'll need to install and
+# configure an FTP server (we've used ProFTPd since it can use Galaxy's
+# database for authentication) and set the following two options.
+
+# This should point to a directory containing subdirectories matching users'
+# email addresses, where Galaxy will look for files.
+#ftp_upload_dir = None
+
+# This should be the hostname of your FTP server, which will be provided to
+# users in the help text.
+#ftp_upload_site = None
+
+# -- Job Execution
+
+# If running multiple Galaxy processes, one can be designated as the job
+# runner.  For more information, see:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/Config/WebApplicationScaling
+#enable_job_running = True
+
+# Should jobs be tracked through the database, rather than in memory.
+# Necessary if you're running the load balanced setup.
+#track_jobs_in_database = False
+
+# This enables splitting of jobs into tasks, if specified by the particular tool config.
+# This is a new feature and not recommended for production servers yet.
+#use_tasked_jobs = False
+#local_task_queue_workers = 2
+
+# Enable job recovery (if Galaxy is restarted while cluster jobs are running,
+# it can "recover" them when it starts).  This is not safe to use if you are
+# running more than one Galaxy server using the same database.
+#enable_job_recovery = True
+
+# Setting metadata on job outputs to in a separate process (or if using a
+# cluster, on the cluster).  Thanks to Python's Global Interpreter Lock and the
+# hefty expense that setting metadata incurs, your Galaxy process may become
+# unresponsive when this operation occurs internally.
+#set_metadata_externally = False
+
+# Although it is fairly reliable, setting metadata can occasionally fail.  In
+# these instances, you can choose to retry setting it internally or leave it in
+# a failed state (since retrying internally may cause the Galaxy process to be
+# unresponsive).  If this option is set to False, the user will be given the
+# option to retry externally, or set metadata manually (when possible).
+#retry_metadata_internally = True
+
+# If (for example) you run on a cluster and your datasets (by default,
+# database/files/) are mounted read-only, this option will override tool output
+# paths to write outputs to the working directory instead, and the job manager
+# will move the outputs to their proper place in the dataset directory on the
+# Galaxy server after the job completes.
+#outputs_to_working_directory = False
+
+# Number of concurrent jobs to run (local job runner)
+#local_job_queue_workers = 5
+
+# Jobs can be killed after a certain amount of execution time.  Format is in
+# hh:mm:ss.  Currently only implemented for PBS.
+#job_walltime = None
+
+# Jobs can be killed if any of their outputs grow over a certain size (in
+# bytes).  0 for no limit.
+#output_size_limit = 0
+
+# Clustering Galaxy is not a straightforward process and requires some
+# pre-configuration.  See the the wiki before attempting to set any of these
+# options:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/Config/Cluster
+
+# Comma-separated list of job runners to start.  local is always started.  If
+# left commented, no jobs will be run on the cluster, even if a cluster URL is
+# explicitly defined in the [galaxy:tool_runners] section below.  The runners
+# currently available are 'pbs' and 'drmaa'.
+#start_job_runners = None
+
+# The URL for the default runner to use when a tool doesn't explicitly define a
+# runner below.
+#default_cluster_job_runner = local:///
+
+# The cluster runners have their own thread pools used to prepare and finish
+# jobs (so that these sometimes lengthy operations do not block normal queue
+# operation).  The value here is the number of worker threads available to each
+# started runner.
+#cluster_job_queue_workers = 3
+
+# These options are only used when using file staging with PBS.
+#pbs_application_server = 
+#pbs_stage_path = 
+#pbs_dataset_server = 
+
+# ---- Tool Job Runners -----------------------------------------------------
+
+# Individual per-tool job runner overrides.  If not listed here, a tool will
+# run with the runner defined with default_cluster_job_runner.
+
+[galaxy:tool_runners]
+
+biomart = local:///
+encode_db1 = local:///
+hbvar = local:///
+microbial_import1 = local:///
+ucsc_table_direct1 = local:///
+ucsc_table_direct_archaea1 = local:///
+ucsc_table_direct_test1 = local:///
+upload1 = local:///
+
+# ---- Galaxy Message Queue -------------------------------------------------
+
+# Galaxy uses AMQ protocol to receive messages from external sources like 
+# bar code scanners. Galaxy has been tested against RabbitMQ AMQP implementation.
+# For Galaxy to receive messages from a message queue the RabbitMQ server has 
+# to be set up with a user account and other parameters listed below. The 'host'
+# and 'port' fields should point to where the RabbitMQ server is running. 
+
+[galaxy_amqp]
+
+#host = 127.0.0.1
+#port = 5672
+#userid = galaxy
+#password = galaxy
+#virtual_host = galaxy_messaging_engine
+#queue = galaxy_queue
+#exchange = galaxy_exchange
+#routing_key = bar_code_scanner
+#rabbitmqctl_path = /path/to/rabbitmqctl 

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/metadata.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/metadata.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/metadata.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,6 @@
+maintainer       "YOUR_COMPANY_NAME"
+maintainer_email "YOUR_EMAIL"
+license          "All rights reserved"
+description      "Installs/Configures galaxy"
+long_description IO.read(File.join(File.dirname(__FILE__), 'README.rdoc'))
+version          "0.0.1"

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/blast-nfsserver.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/blast-nfsserver.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/blast-nfsserver.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,45 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+if ! File.exists?(node[:blast][:dir])
+
+  directory "#{node[:blast][:dir]}" do
+    owner "root"
+    group "root"
+    mode "0755"
+    action :create
+  end
+  
+  remote_file "#{node[:scratch_dir]}/blast.tar.gz" do
+    source "http://mirrors.vbi.vt.edu/mirrors/ftp.ncbi.nih.gov/blast/executables/blast+/2.2.25/ncbi-blast-2.2.25+-ia32-linux.tar.gz"
+    owner "root"
+    group "root"
+    mode "0644"
+  end  
+
+  execute "tar" do
+    user "root"
+    group "root"
+    command "tar xzf #{node[:scratch_dir]}/blast.tar.gz --strip-components=1 --directory #{node[:blast][:dir]}"
+    action :run
+  end  	
+  
+  link "/nfs/software/bin/blastp" do
+    to "#{node[:blast][:dir]}/bin/blastp"
+  end
+
+end
+  

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/default.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/default.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/default.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,8 @@
+#
+# Cookbook Name:: galaxy
+# Recipe:: default
+#
+# Copyright 2011, YOUR_COMPANY_NAME
+#
+# All rights reserved - Do Not Redistribute
+#

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/galaxy-globus-common.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/galaxy-globus-common.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/galaxy-globus-common.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,112 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: Galaxy (Globus fork) common actions
+##
+## This recipe performs common actions required when installing the Globus
+## fork of Galaxy. If Galaxy is being installed on a domain with NFS/NIS,
+## this recipe must be run on the NFS/NIS server, and the galaxy-globus
+## recipe can be run on another node.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+gp_domain = node[:topology][:domains][node[:domain_id]]
+gp_node   = gp_domain[:nodes][node[:node_id]]
+
+go_endpoints = gp_domain[:go_endpoints].to_a
+
+if go_endpoints.size > 0
+	go_endpoint = go_endpoints[0]
+	go_endpoint = "#{go_endpoint[:user]}##{go_endpoint[:name]}" 
+else
+	go_endpoint = ""
+end
+
+if gp_domain[:nfs_server]
+    homedirs = "/nfs/home"
+else
+    homedirs = "/home"
+end
+
+group "galaxy" do
+  gid 4000
+end
+
+user "galaxy" do
+  comment "Galaxy User"
+  uid 4000
+  gid 4000
+  home "#{homedirs}/galaxy"
+  password "!"
+  shell "/bin/bash"
+  supports :manage_home => true
+  notifies :run, "execute[ypinit]"
+end
+
+# We need to run this for changes to take effect in the NIS server.
+execute "ypinit" do
+ only_if do gp_domain[:nis_server] end
+ user "root"
+ group "root"
+ command "make -C /var/yp"
+ action :nothing
+end
+
+if ! File.exists?(node[:galaxy][:dir])
+
+  directory "#{node[:galaxy][:dir]}" do
+    owner "galaxy"
+    group "galaxy"
+    mode "0755"
+    action :create
+  end
+  
+  remote_file "#{node[:scratch_dir]}/galaxy-dist.tip.tar.bz2" do
+    source "https://bitbucket.org/steder/galaxy-globus/get/tip.tar.bz2"
+    owner "root"
+    group "root"    
+    mode "0644"
+  end
+
+  execute "tar" do
+    user "galaxy"
+    group "galaxy"
+    command "tar xjf #{node[:scratch_dir]}/galaxy-dist.tip.tar.bz2 --strip-components=1 --directory #{node[:galaxy][:dir]}"
+    action :run
+  end  	
+
+  cookbook_file "#{node[:galaxy][:dir]}/galaxy-setup.sh" do
+    source "galaxy-setup.sh"
+    owner "galaxy"
+    group "galaxy"
+    mode "0755"
+  end
+  
+  template "#{node[:galaxy][:dir]}/universe_wsgi.ini" do
+    source "galaxy-universe.erb"
+    mode 0644
+    owner "galaxy"
+    group "galaxy"
+    variables(
+      :db_connect => "postgres:///galaxy?user=galaxy&password=galaxy&host=/var/run/postgresql",
+      :go_endpoint => go_endpoint
+    )
+  end  
+
+end
+  

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/galaxy-globus.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/galaxy-globus.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/recipes/galaxy-globus.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,107 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: Galaxy (Globus fork) server
+##
+## This installs the Globus fork of Galaxy. 
+## If Galaxy is being installed on a domain with NFS/NIS, you must have applied
+## the galaxy-globus-common recipe to the NFS/NIS server. If you are running
+## a standalone Galaxy server, you will need to apply galaxy-globus-common and
+## galaxy-globus on the same node.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include_recipe "postgresql::server"
+
+database_exists = "psql galaxy postgres -c ''"
+
+# Create postgresql user
+
+execute "createuser" do
+  user "postgres"
+  command "createuser -D -S -R galaxy"
+  action :run
+  not_if database_exists
+end  
+
+execute "createdb" do
+  user "postgres"
+  command "createdb galaxy"
+  action :run
+  not_if database_exists
+end  
+
+execute "alter_user" do
+  user "postgres"
+  command "psql -c \"alter user galaxy with encrypted password 'galaxy';\""
+  action :run
+  not_if database_exists
+end  
+
+execute "grant_all" do
+  user "postgres"
+  command "psql -c \"grant all privileges on database galaxy to galaxy;\""
+  action :run
+  not_if database_exists
+end
+
+case node.platform
+  when "ubuntu"
+    if node.platform_version.to_f >= 11.04
+		package "python2.6"
+		execute "update-alternatives" do
+		  python_version = `python -c "import sys; print sys.version_info[0] * 10 + sys.version_info[1]"`.to_f
+		  only_if do python_version > 26 end
+		  user "root"
+		  command "update-alternatives --install /usr/bin/python python /usr/bin/python2.6 10"
+		  action :run
+		end
+    end    
+end
+
+execute "galaxy-setup.sh" do
+  user "galaxy"
+  group "galaxy"
+  cwd node[:galaxy][:dir]
+  command "./galaxy-setup.sh"
+  action :run
+end  
+ 
+# Add init script
+cookbook_file "/etc/init.d/galaxy" do
+  source "galaxy.init"
+  owner "root"
+  group "root"
+  mode "0755"
+  notifies :run, "execute[update-rc.d]"
+end
+  
+execute "update-rc.d" do
+  user "root"
+  group "root"
+  command "update-rc.d galaxy defaults"
+  action :nothing
+end  
+
+execute "galaxy_restart" do
+ user "root"
+ group "root"
+ command "/etc/init.d/galaxy restart"
+ action :run
+ environment ({'PATH' => "/nfs/software/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"}) 
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/templates/default/galaxy-universe.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/templates/default/galaxy-universe.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/galaxy/templates/default/galaxy-universe.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,574 @@
+#
+# Galaxy is configured by default to be useable in a single-user development
+# environment.  To tune the application for a multi-user production
+# environment, see the documentation at:
+#
+# http://bitbucket.org/galaxy/galaxy-central/wiki/Config/ProductionServer
+#
+
+# Throughout this sample configuration file, except where stated otherwise,
+# uncommented values override the default if left unset, whereas commented
+# values are set to the default value.
+# examples of many of these options are explained in more detail in the wiki:
+#
+# Config hackers are encouraged to check there before asking for help.
+
+# ---- HTTP Server ----------------------------------------------------------
+
+# Configuration of the internal HTTP server.
+
+[server:main]
+
+# The internal HTTP server to use.  Currently only Paste is provided.  This
+# option is required.
+use = egg:Paste#http
+
+# The port on which to listen.
+#port = 8080
+
+# The address on which to listen.  By default, only listen to localhost (Galaxy
+# will not be accessible over the network).  Use '0.0.0.0' to listen on all
+# available network interfaces.
+host = 0.0.0.0
+
+# Use a threadpool for the web server instead of creating a thread for each
+# request.
+use_threadpool = True
+
+# Number of threads in the web server thread pool.
+#threadpool_workers = 10
+
+# ---- Filters --------------------------------------------------------------
+
+# Filters sit between Galaxy and the HTTP server.
+
+# These filters are disabled by default.  They can be enabled with
+# 'filter-with' in the [app:main] section below.
+
+# Define the gzip filter.
+[filter:gzip]
+use = egg:Paste#gzip
+
+# Define the proxy-prefix filter.
+[filter:proxy-prefix]
+use = egg:PasteDeploy#prefix
+prefix = /galaxy
+
+# ---- Galaxy ---------------------------------------------------------------
+
+# Configuration of the Galaxy application.
+
+[app:main]
+
+# -- Application and filtering
+
+# The factory for the WSGI application.  This should not be changed.
+paste.app_factory = galaxy.web.buildapp:app_factory
+
+# If not running behind a proxy server, you may want to enable gzip compression
+# to decrease the size of data transferred over the network.  If using a proxy
+# server, please enable gzip compression there instead.
+#filter-with = gzip
+
+# If running behind a proxy server and Galaxy is served from a subdirectory,
+# enable the proxy-prefix filter and set the prefix in the
+# [filter:proxy-prefix] section above.
+#filter-with = proxy-prefix
+
+# If proxy-prefix is enabled and you're running more than one Galaxy instance
+# behind one hostname, you will want to set this to the same path as the prefix
+# in the filter above.  This value becomes the "path" attribute set in the
+# cookie so the cookies from each instance will not clobber each other.
+#cookie_path = None
+
+# -- Database
+
+# By default, Galaxy uses a SQLite database at 'database/universe.sqlite'.  You
+# may use a SQLAlchemy connection string to specify an external database
+# instead.  This string takes many options which are explained in detail in the
+# config file documentation.
+database_connection = <%=@db_connect%>
+
+# If the server logs errors about not having enough database pool connections,
+# you will want to increase these values, or consider running more Galaxy
+# processes.
+#database_engine_option_pool_size = 5
+#database_engine_option_max_overflow = 10
+
+# If using MySQL and the server logs the error "MySQL server has gone away",
+# you will want to set this to some positive value (7200 should work).
+#database_engine_option_pool_recycle = -1
+
+# If large database query results are causing memory or response time issues in
+# the Galaxy process, leave the result on the server instead.  This option is
+# only available for PostgreSQL and is highly recommended.
+#database_engine_option_server_side_cursors = False
+
+# Create only one connection to the database per thread, to reduce the
+# connection overhead.  Recommended when not using SQLite:
+#database_engine_option_strategy = threadlocal
+
+# Log all database transactions, can be useful for debugging and performance
+# profiling.  Logging is done via Python's 'logging' module under the qualname
+# 'galaxy.model.orm.logging_connection_proxy'
+#database_query_profiling_proxy = False
+
+# -- Files and directories
+
+# Dataset files are stored in this directory.
+#file_path = database/files
+
+# Temporary files are stored in this directory.
+#new_file_path = database/tmp
+
+# Tool config file, defines what tools are available in Galaxy.
+#tool_config_file = tool_conf.xml
+
+# Path to the directory containing the tools defined in the config.
+#tool_path = tools
+
+# Directory where data used by tools is located, see the samples in that
+# directory and the wiki for help:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/DataIntegration
+#tool_data_path = tool-data
+
+# Directory where chrom len files are kept, currently mainly used by trackster
+#len_file_path = tool-data/shared/ucsc/chrom
+
+
+# Datatypes config file, defines what data (file) types are available in
+# Galaxy.
+#datatypes_config_file = datatypes_conf.xml
+
+# Each job is given a unique empty directory as its current working directory.
+# This option defines in what parent directory those directories will be
+# created.
+#job_working_directory = database/job_working_directory
+
+# If using a cluster, Galaxy will write job scripts and stdout/stderr to this
+# directory.
+#cluster_files_directory = database/pbs
+
+# External service types config file, defines what types of external_services configurations 
+# are available in Galaxy.
+#external_service_type_config_file = external_service_types_conf.xml
+
+# Path to the directory containing the external_service_types defined in the config.
+#external_service_type_path = external_service_types
+
+# -- Mail and notification
+
+# Galaxy sends mail for various things: Subscribing users to the mailing list
+# if they request it, emailing password resets, notification from the Galaxy
+# Sample Tracking system, and reporting dataset errors.  To do this, it needs
+# to send mail through an SMTP server, which you may define here.
+#smtp_server = None
+
+# On the user registration form, users may choose to join the mailing list.
+# This is the address of the list they'll be subscribed to.
+#mailing_join_addr = galaxy-user-join at bx.psu.edu
+
+# Datasets in an error state include a link to report the error.  Those reports
+# will be sent to this address.  Error reports are disabled if no address is set.
+#error_email_to = None
+
+# -- Display sites
+
+# Galaxy can display data at various external browsers.  These options specify
+# which browsers should be available.  URLs and builds available at these
+# browsers are defined in the specifield files.
+
+# UCSC browsers: tool-data/shared/ucsc/ucsc_build_sites.txt
+#ucsc_display_sites = main,test,archaea,ucla
+
+# GBrowse servers: tool-data/shared/gbrowse/gbrowse_build_sites.txt
+#gbrowse_display_sites = wormbase,tair,modencode_worm,modencode_fly,yeast_sgd
+
+# GeneTrack servers: tool-data/shared/genetrack/genetrack_sites.txt
+#genetrack_display_sites = main,test
+
+# -- Next gen LIMS interface on top of existing Galaxy Sample/Request management code.
+
+use_nglims = False
+nglims_config_file = tool-data/nglims.yaml
+
+# -- UI Localization
+
+# Append "/{brand}" to the "Galaxy" text in the masthead.
+#brand = None
+
+# The URL linked by the "Galaxy/brand" text.
+#logo_url = /
+
+# The URL linked by the "Galaxy Wiki" link in the "Help" menu.
+#wiki_url = http://bitbucket.org/galaxy/galaxy-central/wiki
+
+# The URL linked by the "Email comments..." link in the "Help" menu.
+#bugs_email = mailto:galaxy-bugs at bx.psu.edu
+
+# The URL linked by the "How to Cite..." link in the "Help" menu.
+#citation_url = http://bitbucket.org/galaxy/galaxy-central/wiki/Citations
+
+# Serve static content, which must be enabled if you're not serving it via a
+# proxy server.  These options should be self explanatory and so are not
+# documented individually.  You can use these paths (or ones in the proxy
+# server) to point to your own styles.
+static_enabled = True
+static_cache_time = 360
+static_dir = %(here)s/static/
+static_images_dir = %(here)s/static/images
+static_favicon_dir = %(here)s/static/favicon.ico
+static_scripts_dir = %(here)s/static/scripts/
+static_style_dir = %(here)s/static/june_2007_style/blue
+
+# -- Advanced proxy features
+
+# For help on configuring the Advanced proxy features, see:
+# http://usegalaxy.org/production
+
+# Apache can handle file downloads (Galaxy-to-user) via mod_xsendfile.  Set
+# this to True to inform Galaxy that mod_xsendfile is enabled upstream.
+#apache_xsendfile = False
+
+# The same download handling can be done by nginx using X-Accel-Redirect.  This
+# should be set to the path defined in the nginx config as an internal redirect
+# with access to Galaxy's data files (see documentation linked above).
+#nginx_x_accel_redirect_base = False
+
+# nginx can make use of mod_zip to create zip files containing multiple library
+# files.  If using X-Accel-Redirect, this can be the same value as that option.
+#nginx_x_archive_files_base = False
+
+# If using compression in the upstream proxy server, use this option to disable
+# gzipping of library .tar.gz and .zip archives, since the proxy server will do
+# it faster on the fly.
+#upstream_gzip = False
+
+# nginx can also handle file uploads (user-to-Galaxy) via nginx_upload_module.
+# Configuration for this is complex and explained in detail in the
+# documentation linked above.  The upload store is a temporary directory in
+# which files uploaded by the upload module will be placed.
+#nginx_upload_store = False
+
+# This value overrides the action set on the file upload form, e.g. the web
+# path where the nginx_upload_module has been configured to intercept upload
+# requests.
+#nginx_upload_path = False
+
+# -- Logging and Debugging
+
+# Verbosity of console log messages.  Acceptable values can be found here:
+# http://docs.python.org/library/logging.html#logging-levels
+#log_level = DEBUG
+
+# Print database operations to the server log (warning, quite verbose!).
+#database_engine_option_echo = False
+
+# Print database pool operations to the server log (warning, quite verbose!).
+#database_engine_option_echo_pool = False
+
+# Turn on logging of application events and some user events to the database.
+#log_events = True
+
+# Turn on logging of user actions to the database. Actions currently logged are
+# grid views, tool searches, and use of "recently" used tools menu.  The
+# log_events and log_actions functionality will eventually be merged.
+#log_actions = True
+
+# Debug enables access to various config options useful for development and
+# debugging: use_lint, use_profile, use_printdebug and use_interactive.  It
+# also causes the files used by PBS/SGE (submission script, output, and error)
+# to remain on disk after the job is complete.  Debug mode is disabled if
+# commented, but is uncommented by default in the sample config.
+debug = True
+
+# Check for WSGI compliance.
+#use_lint = False
+
+# Run the Python profiler on each request.
+#use_profile = False
+
+# Intercept print statements and show them on the returned page.
+#use_printdebug = True
+
+# Enable live debugging in your browser.  This should NEVER be enabled on a
+# public site.  Enabled in the sample config for development.
+use_interactive = True
+
+# Write thread status periodically to 'heartbeat.log',  (careful, uses disk
+# space rapidly!).  Useful to determine why your processes may be consuming a
+# lot of CPU.
+#use_heartbeat = False
+
+# Enable the memory debugging interface (careful, negatively impacts server
+# performance).
+#use_memdump = False
+
+# -- Data Libraries
+
+# These library upload options are described in much more detail in the wiki:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/DataLibraries/UploadingFiles
+
+# Add an option to the library upload form which allows administrators to
+# upload a directory of files.
+library_import_dir = True
+
+# Add an option to the library upload form which allows authorized
+# non-administrators to upload a directory of files.  The configured directory
+# must contain sub-directories named the same as the non-admin user's Galaxy
+# login ( email ).  The non-admin user is restricted to uploading files or
+# sub-directories of files contained in their directory.
+#user_library_import_dir = None
+
+# Add an option to the admin library upload tool allowing admins to paste
+# filesystem paths to files and directories in a box, and these paths will be
+# added to a library.  Set to True to enable.  Please note the security
+# implication that this will give Galaxy Admins access to anything your Galaxy
+# user has access to.
+allow_library_path_paste = True
+
+# Users may choose to download multiple files from a library in an archive.  By
+# default, Galaxy allows users to select from a few different archive formats
+# if testing shows that Galaxy is able to create files using these formats.
+# Specific formats can be disabled with this option, separate more than one
+# format with commas.  Available formats are currently 'zip', 'gz', and 'bz2'.
+#disable_library_comptypes = 
+
+# Some sequencer integration features in beta allow you to automatically
+# transfer datasets.  This is done using a lightweight transfer manager which
+# runs outside of Galaxy (but is spawned by it automatically).  Galaxy will
+# communicate with this manager over the port specified here.
+#transfer_manager_port = 8163
+
+# Search data libraries with whoosh
+#enable_whoosh_library_search = True
+# Whoosh indexes are stored in this directory.
+#whoosh_index_dir = database/whoosh_indexes
+
+# Search data libraries with lucene
+#enable_lucene_library_search = False
+# maxiumum file size to index for searching, in MB
+#fulltext_max_size = 500
+#fulltext_noindex_filetypes=bam,sam,wig,bigwig,fasta,fastq,fastqsolexa,fastqillumina,fastqsanger
+# base URL of server providing search functionality using lucene
+#fulltext_url = http://localhost:8081
+
+# -- Users and Security
+
+# Galaxy encodes various internal values when these values will be output in
+# some format (for example, in a URL or cookie).  You should set a key to be
+# used by the algorithm that encodes and decodes these values.  It can be any
+# string.  If left unchanged, anyone could construct a cookie that would grant
+# them access to others' sessions.
+#id_secret = USING THE DEFAULT IS NOT SECURE!
+
+# User authentication can be delegated to an upstream proxy server (usually
+# Apache).  The upstream proxy should set a REMOTE_USER header in the request.
+# Enabling remote user disables regular logins.  For more information, see:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/Config/ApacheProxy
+#use_remote_user = False
+
+# If use_remote_user is enabled and your external authentication
+# method just returns bare usernames, set a default mail domain to be appended
+# to usernames, to become your Galaxy usernames (email addresses).
+#remote_user_maildomain = None
+
+# If use_remote_user is enabled, you can set this to a URL that will log your
+# users out.
+#remote_user_logout_href = None
+
+# Administrative users - set this to a comma-separated list of valid Galaxy
+# users (email addresses).  These users will have access to the Admin section
+# of the server, and will have access to create users, groups, roles,
+# libraries, and more.  For more information, see:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/Admin/AdminInterface
+admin_users = steder at ci.uchicago.edu,borja at cs.uchicago.edu,madduri at mcs.anl.gov,ballen at ci.uchicago.edu
+
+# Force everyone to log in (disable anonymous access).
+#require_login = False
+
+# Allow unregistered users to create new accounts (otherwise, they will have to
+# be created by an admin).
+#allow_user_creation = True
+
+# Allow administrators to delete accounts.
+#allow_user_deletion = False
+
+# By default, users' data will be public, but setting this to True will cause
+# it to be private.  Does not affect existing users and data, only ones created
+# after this option is set.  Users may still change their default back to
+# public.
+#new_user_dataset_access_role_default_private = False
+
+# -- Beta features
+
+# Enable Galaxy to communicate directly with a sequencer
+#enable_sequencer_communication = False
+
+# Enable Galaxy's built-in visualization module, Trackster.
+#enable_tracks = False
+
+# Enable Galaxy Pages. Pages are custom webpages that include embedded Galaxy items, 
+# such as datasets, histories, workflows, and visualizations; pages are useful for 
+# documenting and sharing multiple analyses or workflows. Pages are created using a 
+# WYSIWYG editor that is very similar to a word processor.
+#enable_pages = False
+
+# Enable authentication via OpenID.  Allows users to log in to their Galaxy
+# account by authenticating with an OpenID provider.
+enable_openid = True
+
+# Enable the (experimental! beta!) Web API.  Documentation forthcoming.
+#enable_api = False
+
+# Enable Galaxy's "Upload via FTP" interface.  You'll need to install and
+# configure an FTP server (we've used ProFTPd since it can use Galaxy's
+# database for authentication) and set the following two options.
+
+# This should point to a directory containing subdirectories matching users'
+# email addresses, where Galaxy will look for files.
+ftp_upload_dir = /nfs/scratch
+
+# this value changes how the user_ftp_dir is determined:
+#  - normally it is set by doing os.path.join(ftp_upload_dir, user.email)
+#  - with globus we want to do os.path.join(ftp_upload_dir, user.username)
+globus_online = True
+
+# The endpoint to use when doing globus transfers onto the galaxy machine:
+globus_endpoint = "<%=@go_endpoint%>"
+
+# home directory root:
+# normally this is /home
+# As a hack I'm looking for credential files in a users home directory
+home_root = /nfs/home
+
+# globus cert settings:
+# globus expects the user home directory to contain a user key and user cert:
+globus_userkey = .globus/userkey.pem
+globus_usercert = .globus/usercert.pem
+# you also need to specify the path to your root certificate:
+globus_rootcert = /etc/grid-security/certificates/gd-bundle_ca.cert
+
+# When we want to transfer files back with globus online we symbolicly
+# link those datasets from galaxy's home dir into something readable
+# by globus.
+#
+globus_scratch = /nfs/scratch
+
+# This should be the hostname of your FTP server, which will be provided to
+# users in the help text.
+ftp_upload_site = "go://borja#galaxy"
+
+# -- Job Execution
+
+# If running multiple Galaxy processes, one can be designated as the job
+# runner.  For more information, see:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/Config/WebApplicationScaling
+#enable_job_running = True
+
+# Should jobs be tracked through the database, rather than in memory.
+# Necessary if you're running the load balanced setup.
+#track_jobs_in_database = False
+
+# This enables splitting of jobs into tasks, if specified by the particular tool config.
+# This is a new feature and not recommended for production servers yet.
+#use_tasked_jobs = False
+#local_task_queue_workers = 2
+
+# Enable job recovery (if Galaxy is restarted while cluster jobs are running,
+# it can "recover" them when it starts).  This is not safe to use if you are
+# running more than one Galaxy server using the same database.
+#enable_job_recovery = True
+
+# Setting metadata on job outputs to in a separate process (or if using a
+# cluster, on the cluster).  Thanks to Python's Global Interpreter Lock and the
+# hefty expense that setting metadata incurs, your Galaxy process may become
+# unresponsive when this operation occurs internally.
+#set_metadata_externally = False
+
+# Although it is fairly reliable, setting metadata can occasionally fail.  In
+# these instances, you can choose to retry setting it internally or leave it in
+# a failed state (since retrying internally may cause the Galaxy process to be
+# unresponsive).  If this option is set to False, the user will be given the
+# option to retry externally, or set metadata manually (when possible).
+#retry_metadata_internally = True
+
+# If (for example) you run on a cluster and your datasets (by default,
+# database/files/) are mounted read-only, this option will override tool output
+# paths to write outputs to the working directory instead, and the job manager
+# will move the outputs to their proper place in the dataset directory on the
+# Galaxy server after the job completes.
+#outputs_to_working_directory = False
+
+# Number of concurrent jobs to run (local job runner)
+#local_job_queue_workers = 5
+
+# Jobs can be killed after a certain amount of execution time.  Format is in
+# hh:mm:ss.  Currently only implemented for PBS.
+#job_walltime = None
+
+# Jobs can be killed if any of their outputs grow over a certain size (in
+# bytes).  0 for no limit.
+#output_size_limit = 0
+
+# Clustering Galaxy is not a straightforward process and requires some
+# pre-configuration.  See the the wiki before attempting to set any of these
+# options:
+# http://bitbucket.org/galaxy/galaxy-central/wiki/Config/Cluster
+
+# Comma-separated list of job runners to start.  local is always started.  If
+# left commented, no jobs will be run on the cluster, even if a cluster URL is
+# explicitly defined in the [galaxy:tool_runners] section below.  The runners
+# currently available are 'pbs' and 'drmaa'.
+#start_job_runners = None
+
+# The URL for the default runner to use when a tool doesn't explicitly define a
+# runner below.
+#default_cluster_job_runner = local:///
+
+# The cluster runners have their own thread pools used to prepare and finish
+# jobs (so that these sometimes lengthy operations do not block normal queue
+# operation).  The value here is the number of worker threads available to each
+# started runner.
+#cluster_job_queue_workers = 3
+
+# These options are only used when using file staging with PBS.
+#pbs_application_server = 
+#pbs_stage_path = 
+#pbs_dataset_server = 
+
+# ---- Tool Job Runners -----------------------------------------------------
+
+# Individual per-tool job runner overrides.  If not listed here, a tool will
+# run with the runner defined with default_cluster_job_runner.
+
+[galaxy:tool_runners]
+
+biomart = local:///
+encode_db1 = local:///
+hbvar = local:///
+microbial_import1 = local:///
+ucsc_table_direct1 = local:///
+ucsc_table_direct_archaea1 = local:///
+ucsc_table_direct_test1 = local:///
+upload1 = local:///
+
+# ---- Galaxy Message Queue -------------------------------------------------
+
+# Galaxy uses AMQ protocol to receive messages from external sources like 
+# bar code scanners. Galaxy has been tested against RabbitMQ AMQP implementation.
+# For Galaxy to receive messages from a message queue the RabbitMQ server has 
+# to be set up with a user account and other parameters listed below. The 'host'
+# and 'port' fields should point to where the RabbitMQ server is running. 
+
+[galaxy_amqp]
+
+#host = 127.0.0.1
+#port = 5672
+#userid = galaxy
+#password = galaxy
+#virtual_host = galaxy_messaging_engine
+#queue = galaxy_queue
+#exchange = galaxy_exchange
+#routing_key = bar_code_scanner
+#rabbitmqctl_path = /path/to/rabbitmqctl 
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/README.rdoc
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/README.rdoc	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/README.rdoc	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+= DESCRIPTION:
+
+These recipes are used by Globus Provision; they are not meant to be used
+directly.  Please refer to the Globus Provision documentation for instructions 
+on how to deploy and configure a Globus system using these recipes.
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/4396eb4d.0
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/4396eb4d.0	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/4396eb4d.0	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFtTCCA52gAwIBAgIJAJhUGjc90yzKMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
+BAYTAlVTMRowGAYDVQQKExFHbG9idXMgQ29uc29ydGl1bTEaMBgGA1UEAxMRR2xv
+YnVzIENvbm5lY3QgQ0EwHhcNMTEwMjE3MTU1NDA1WhcNMTYwODA5MTU1NDA1WjBF
+MQswCQYDVQQGEwJVUzEaMBgGA1UEChMRR2xvYnVzIENvbnNvcnRpdW0xGjAYBgNV
+BAMTEUdsb2J1cyBDb25uZWN0IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+CgKCAgEAsDDXyExuG5s5CgPsSqWRD/rc+O9ceaEU25xqmUuo53i4D0+e3taGEkmK
+5RC3VsQNJMp19Cccbul8jmDnmpa2lpbhuTz+RSGkRs7ap7x+mogoJ2W3jVhAfNFH
+U8lrQ5TQ2jLhEJRuDJjcPFIn3n1fIfIR6GKMH0XOI9aLJGGabmpw/2wo0VzxadU6
+CtuhdCr4g2uII64lSME/GtV86OZQKINxmFS9MxjWpjYk1JxoaOAjRz5FKqyT+RAt
+OfN7cW9r/J1S6fQHATUlh9B6P3nav7AJ3CiORLGNIgC8fNqCm7mLtbI7eU6oRkMv
+0sTahdc0TgIfXqT+5+L/deWEeym0sHYaR+VLVe8QvZAkHkrp3Wmi2h3RLvs3lpyY
+w6LU7mlvQZBuRoEun2SRGD3znFzj6i71yjw0uZXFXfunOvVwS7Hz/MGLouQUCCZZ
+UPR1IIkCmiYLKcbQJgWwZS25R6/dLU1sYNpbyS2cLnjfxOpe+YUVtuo1bLGjLNuI
+1w42qOZWhLfiUM7A51vSevyi/Xi5dXVTMF4ojnx6gfqBmjvCxshtox9Ks46ZeA6e
+4/ExICZQoLl4iicsdg2TN00E3YBq10tBqbbDBL9MxO5a07rnol6IV2cg8YRfhg5a
+jeYi0mCb8FdvCZojYxT6hQHs5XNvyChZUnj9/XfCK2Z9Rn2fRCkCAwEAAaOBpzCB
+pDAdBgNVHQ4EFgQUa2OeAn1TDx4TDJlaaHiHSYKnMRkwdQYDVR0jBG4wbIAUa2Oe
+An1TDx4TDJlaaHiHSYKnMRmhSaRHMEUxCzAJBgNVBAYTAlVTMRowGAYDVQQKExFH
+bG9idXMgQ29uc29ydGl1bTEaMBgGA1UEAxMRR2xvYnVzIENvbm5lY3QgQ0GCCQCY
+VBo3PdMsyjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4ICAQBbnicVSC1L
+UiYNWR/PNjYd8RKUyxUyNYxx1lCqCMYBaROp7mD9ddklT7C/H7tt5WxZDAwl7XRv
+jckXmcnn8nqqiwsDfh0dcgE0FZEQNRc+IyXyw+sjE6rLDHc0WcUDVgV5wM1GFf23
+92PnOTz2pNPLDVxLsGc3452EreNzZyW82atklXuuUGRyhnVB5iFlLREgc3UPmumu
+Q6uiZDvST6JJ6BSC2KkHUjnUKBZy6kOE1CyZIv24eE1pTxE/P4uCVp7+9yysYJ4h
+771aH3tSkJ8AMcmFY+UCZ1H4Ck+u4rP80y4RheMvUhZ4sGQ4R3AMmpEFX8lgFc4P
+uZBW1DOKJ0kj6+z30BNKpeBsCjEjLGsQlNGFYhevVm9/ZnKEHBIr49+asFftV491
+DnhZJ0IxZlQ3JTG9tQQLWDPSEBiQKMxicHtC9bnegTXPxFvv8kd3z/vnbJnEx3Sz
+jzDo9yrhHIdjTaY/Ej9xB5ax051unOxi4Ozpexj3h9+J+5rw1jd4w8ex15oX6xcQ
+qhxDfB/6rbKtCyTMkp6030pDlf7RLDWouX1Y7zzOfL66X/dckoCCIi3rqfkEiqrt
+N/OGwF2ENQ6TS4q1rMj/SKNZpJZn7RHw0RxUf3V6O4T2C+JCYLF/pR3TCkWwh3VC
+gjMI3URhfQBdQSn2aT6rIylSMtnyLyfj9g==
+-----END CERTIFICATE-----

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/4396eb4d.signing_policy
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/4396eb4d.signing_policy	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/4396eb4d.signing_policy	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,13 @@
+# Format:
+#------------------------------------------------------------------------
+#  token type  | def.authority |                value              
+#--------------|---------------|-----------------------------------------
+# EACL entry #1|
+
+access_id_CA      X509      '/C=US/O=Globus Consortium/CN=Globus Connect CA'
+
+pos_rights        globus    CA:sign
+
+cond_subjects     globus   '"/C=US/O=Globus Consortium/OU=Globus Connect User/*" "/C=US/O=Globus Consortium/OU=Globus Connect Server/*" "/C=US/O=Globus Consortium/OU=Globus Connect Service/*"'
+
+# end of EACL

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/anon.cert
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/anon.cert	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/anon.cert	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDkDCCAXgCAQEwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCVVMxGjAYBgNV
+BAoTEUdsb2J1cyBDb25zb3J0aXVtMRowGAYDVQQDExFHbG9idXMgQ29ubmVjdCBD
+QTAeFw0xMTAyMTcxNjM2MjhaFw0xMjAyMTcxNjM2MjhaMFsxCzAJBgNVBAYTAlVT
+MRowGAYDVQQKExFHbG9idXMgQ29uc29ydGl1bTEcMBoGA1UECxMTR2xvYnVzIENv
+bm5lY3QgVXNlcjESMBAGA1UEAxMJYW5vbnltb3VzMIGfMA0GCSqGSIb3DQEBAQUA
+A4GNADCBiQKBgQDbdaIIAkQ6F2RoEoamBEuvPCvWuyTJgaSKBhzC4+uIsCM0Wsu+
+v/sR68D9eRmbqGpqGv6IlhDSlGWLMObl+UN1kbgzwITtpUlQujvsvJCn8T3u1045
+kRSODZyhsj0EITQAqEl0G2eWw7A/V+8Bu15gOuuACTmkEsIuDfLV7r+OnwIDAQAB
+MA0GCSqGSIb3DQEBBQUAA4ICAQBrraAVmVZlD9jmfMv6OI2hVmIiN80Sb81ykDv8
+bB+qzL2KiLnnk8i56EdU3gzz/J0TVw+XVQ6ZQHpbJkyfjnRVO9vN1RPzYUYZUl0f
+xKXWzWn+uhRyzIWWGi3CMxKg4/fxnIvbkayqqVQolilhF3AH5yQ9xShkMwIhNe60
+1hBcCcotKmKkJ0ABVszHCjchop/l/5Nr2idNUj9kLFmXUC3KL39VOJj+4Uxf5H3a
+CwSFRCOU7qkY16jMmuFsmycwfC0S81GqlNzj1DaIj4YbF2J5d5gZ1ifL0Swm2v1h
+SLmyTQ3UJROxrVaBmsDrnSF4l/Yunsd08C/X27xrbYlNWJDHgdaToaWTIdPBx8Tz
+IsvnLLS3QfEAZERKbc6y+s/KB9n65Yv5b2ZlVTmeDc7mlOQaM0BVSPkmhgK5q2w2
+ZjP85UCbO5HKKJjJHuWr7XAucQskvfI7D4AofKmOcdFz+EhT6F/5EVwhjhDoBda/
+rN9HYRFMtmxbxjpSN9Q0lhKAk9H19JIQSlA1EXFrrUuRs+NfNiFhcDLkTdqaxr2c
+Tf8ve6StjyM2y5cktqr2+HKYUaUypWfOoQkMDeHtP5/Br24foE82BPY+U69SLS3A
+azJla7NZKns05vzTQ74blWcWFWQl1E0KTmeLbOCOPdrcej90UkSKBs+/UUoC2GMJ
+1pA1sg==
+-----END CERTIFICATE-----

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/anon.key
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/anon.key	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/anon.key	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDbdaIIAkQ6F2RoEoamBEuvPCvWuyTJgaSKBhzC4+uIsCM0Wsu+
+v/sR68D9eRmbqGpqGv6IlhDSlGWLMObl+UN1kbgzwITtpUlQujvsvJCn8T3u1045
+kRSODZyhsj0EITQAqEl0G2eWw7A/V+8Bu15gOuuACTmkEsIuDfLV7r+OnwIDAQAB
+AoGBAJFk9sttjPwboVbd5z04HVhkefrSk8W40WTsNcPcsqAlab125gNjN5ig44RK
+5e9dfdr8NWQSX+TTkg7MgD0ejlSs9iKLsgmHDU/l3sadtdBVQ+EDNg+7lzePj1Od
+nffHIih+RK1a5e/g6KdU/57FQ0fk5xdgdbFNXJ493L3h97ypAkEA765/QJCCvFTa
+4nPtmpN9VCSa+xC+nvOKfSqqGbGQimSPTOu0XC7XaU9Iypf6kxOBNT+mYHSku4QY
+djWBziWuuwJBAOpmrTsjgIY6C68GG8XZWorF1ouhDYd7VBl5wrz9ly7RAGXrSp5q
+Fjnk9MwRc0AHlCu/e32LltDHKePT+I1Ea20CQHFDassd/0n0Z4N/+RaFAELVEY/3
+d70xpY5ErSF7MazUnItjD1ZIpG8VknZ6n2UFYJfDPmJyfK5IXC7wVikO0aUCQGHV
+vVRDuy9LJvlEmW75C5uEe8oHzLfRuAZyFeAAEIwP3BSuIpUAPoqnj61lUy9UennQ
+EGEUVDyMBGX9YW7FMfkCQQCRyC9WxlWR9oweffR2hafQLZztC22tDdUlNvj3NlNl
+R20gP5g3g2L4gTDEe06G6Baq0i2Fjpn56R2JwTU1y55F
+-----END RSA PRIVATE KEY-----

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/d1b603c3.0
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/d1b603c3.0	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/d1b603c3.0	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEADCCAuigAwIBAgIBITANBgkqhkiG9w0BAQUFADB1MRMwEQYKCZImiZPyLGQB
+GRYDbmV0MRIwEAYKCZImiZPyLGQBGRYCRVMxDjAMBgNVBAoTBUVTbmV0MSAwHgYD
+VQQLExdDZXJ0aWZpY2F0ZSBBdXRob3JpdGllczEYMBYGA1UEAxMPRVNuZXQgUm9v
+dCBDQSAxMB4XDTAyMTAwODA3MDAwMFoXDTIyMTAyNjA3MDAwMFowdTETMBEGCgmS
+JomT8ixkARkWA25ldDESMBAGCgmSJomT8ixkARkWAkVTMQ4wDAYDVQQKEwVFU25l
+dDEgMB4GA1UECxMXQ2VydGlmaWNhdGUgQXV0aG9yaXRpZXMxGDAWBgNVBAMTD0VT
+bmV0IFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALKF
+PX1QK86g62z/KX0pRAtRnS8VXmrLUDaFMwZyKEeueWxkrymyvnuDo4hCDPrIfEzI
+cAWnJyE1ev4aWw3l3Qm75GDUiyV401Op598iPT5bbCMlHJcYBANwRNKnvtZ8DcoU
+9Ba75tqUQHV1TRx6Nkw1AQ5gNMQSuZ5wCsDREGs+Be3JRa06RJf8k5gw5odqBjCT
+kGmIwCcx1qEuLGXOcQoM+yEKZvD485MiPKaEKYJBRDHi0h+vvj1j8ge9SJ8Jy6ML
+4B+2QNLb7fTjSutMF5qGJKlCgHw6dNLHuW2glS1KZ3Dt1iXkO6SdowclsKvpFhW9
+fDIftu/TOcMLOJi5fgUCAwEAAaOBmjCBlzARBglghkgBhvhCAQEEBAMCAAcwIQYD
+VR0RBBowGIEWRVNuZXQtUm9vdC1DQS0xQGVzLm5ldDAPBgNVHRMBAf8EBTADAQH/
+MB0GA1UdDgQWBBS8XU1IL/g1lFmrXIlLPtGyOhQB6jAfBgNVHSMEGDAWgBS8XU1I
+L/g1lFmrXIlLPtGyOhQB6jAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEFBQAD
+ggEBAA7Gy/hGi6nKiwm2fAXvQNU7Oe86VGz92VPICxjCyCCMW3uYuFAJVTjB6wRM
+UH/fw01I+pC9CZ+RUIhxWqFKJiz+Wf3jkq+25rPQ2Ve5FTesB/urUncwqZKRaOk5
+StSW5XQjCIfKk7W6q6BJk3nMAm67btSoRdE9NfsefEpHbJJ+dtjRgyJx+QX7sOft
+IsqHMWmEj7QTAjoCJvrSTXavHKosQ5s+aPySbZ6R6MCBzTsUzJk1fbTvrzJnzi0s
+H4eyZ17WxRj8BxnyN6BHM/0ger2b/c6vrfrW67/J6A0ebClbdunFdsYxPtcH49yo
+ugTqyKEVEeH7hhVkOH0bGf4Q0Vc=
+-----END CERTIFICATE-----

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/d1b603c3.signing_policy
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/d1b603c3.signing_policy	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/d1b603c3.signing_policy	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,59 @@
+# $Id: d1b603c3.signing_policy,v 1.1 2009/03/27 18:31:33 dhiva Exp $
+#
+# This file is parsed from start to finish with a given CA and subject
+# name.
+# subject names may include the following wildcard characters:
+#    *    Matches any number of characters.
+#    ?    Matches any single character.
+#
+# CA names must be specified (no wildcards). Names containing whitespaces
+# must be included in single quotes, e.g. 'Certification Authority'. 
+# Names must not contain new line symbols. 
+# The value of condition attribute is represented as a set of regular 
+# expressions. Each regular expression must be included in double quotes.  
+#
+# This policy file dictates the following policy:
+#
+#  The ESnet root CA signs certificates of various entities.
+#
+# Format:
+#------------------------------------------------------------------------
+#  token type  | def.authority |                value              
+#--------------|---------------|-----------------------------------------
+# EACL entry #1|
+
+ access_id_CA      X509         '/DC=net/DC=ES/O=ESnet/OU=Certificate Authorities/CN=ESnet Root CA 1'
+ 
+ pos_rights        globus        CA:sign
+ 
+ cond_subjects     globus     	'"/DC=org/DC=DOEGrids/OU=Certificate Authorities/*" "/DC=net/DC=ES/*" "/DC=org/DC=fusiongrid/OU=Certificate Authorities/*"'
+
+#
+# End DOE SG CA Policy
+# 
+# $Log: d1b603c3.signing_policy,v $
+# Revision 1.1  2009/03/27 18:31:33  dhiva
+# *** empty log message ***
+#
+# Revision 1.5  2006/04/20 20:23:16  helm
+# Added fusion grid subdir from mrt, removed misleading doc
+#
+# Revision 1.4  2006/04/20 20:17:22  helm
+# revision change
+#
+# Revision 1.2  2003/05/27 16:29:35  helm
+# Change statement of policy
+#
+# Revision 1.1  2003/05/22 22:38:22  helm
+# *** empty log message ***
+#
+# Revision 1.3  2003/05/03 01:31:42  dhiva
+# Fixed the Subject Name of the ESnet Root CA
+# Modified the access_id_CA and included /O=ESnet
+#
+# Revision 1.2  2003/05/03 01:18:09  dhiva
+# $Id: d1b603c3.signing_policy,v 1.1 2009/03/27 18:31:33 dhiva Exp $ included for all these files
+#
+# Revision 1.1  2003/05/03 01:15:06  dhiva
+# Globus Support Files for pki1.doegrids.org CA
+#

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/gd-bundle_ca.cert
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/gd-bundle_ca.cert	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/gd-bundle_ca.cert	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,76 @@
+-----BEGIN CERTIFICATE-----
+MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
+ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
+RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMTYw
+MTU0MzdaFw0yNjExMTYwMTU0MzdaMIHKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMH
+QXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5j
+b20sIEluYy4xMzAxBgNVBAsTKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j
+b20vcmVwb3NpdG9yeTEwMC4GA1UEAxMnR28gRGFkZHkgU2VjdXJlIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MREwDwYDVQQFEwgwNzk2OTI4NzCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAMQt1RWMnCZM7DI161+4WQFapmGBWTtwY6vj3D3H
+KrjJM9N55DrtPDAjhI6zMBS2sofDPZVUBJ7fmd0LJR4h3mUpfjWoqVTr9vcyOdQm
+VZWt7/v+WIbXnvQAjYwqDL1CBM6nPwT27oDyqu9SoWlm2r4arV3aLGbqGmu75RpR
+SgAvSMeYddi5Kcju+GZtCpyz8/x4fKL4o/K1w/O5epHBp+YlLpyo7RJlbmr2EkRT
+cDCVw5wrWCs9CHRK8r5RsL+H0EwnWGu1NcWdrxcx+AuP7q2BNgWJCJjPOq8lh8BJ
+6qf9Z/dFjpfMFDniNoW1fho3/Rb2cRGadDAW/hOUoz+EDU8CAwEAAaOCATIwggEu
+MB0GA1UdDgQWBBT9rGEyk2xF1uLuhV+auud2mWjM5zAfBgNVHSMEGDAWgBTSxLDS
+kdRMEXGzYcs9of7dqGrU4zASBgNVHRMBAf8ECDAGAQH/AgEAMDMGCCsGAQUFBwEB
+BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZ29kYWRkeS5jb20wRgYDVR0f
+BD8wPTA7oDmgN4Y1aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBv
+c2l0b3J5L2dkcm9vdC5jcmwwSwYDVR0gBEQwQjBABgRVHSAAMDgwNgYIKwYBBQUH
+AgEWKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeTAO
+BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBANKGwOy9+aG2Z+5mC6IG
+OgRQjhVyrEp0lVPLN8tESe8HkGsz2ZbwlFalEzAFPIUyIXvJxwqoJKSQ3kbTJSMU
+A2fCENZvD117esyfxVgqwcSeIaha86ykRvOe5GPLL5CkKSkB2XIsKd83ASe8T+5o
+0yGPwLPk9Qnt0hCqU7S+8MxZC9Y7lhyVJEnfzuz9p0iRFEUOOjZv2kWzRaJBydTX
+RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
+qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
+U+4=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE+zCCBGSgAwIBAgICAQ0wDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1Zh
+bGlDZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
+Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g
+QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAe
+BgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTA0MDYyOTE3MDYyMFoX
+DTI0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBE
+YWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3MgMiBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgC
+ggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
+2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+q
+N1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiO
+r18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lN
+f4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+YihfukEH
+U1jPEX44dMX4/7VpkI+EdOqXG68CAQOjggHhMIIB3TAdBgNVHQ4EFgQU0sSw0pHU
+TBFxs2HLPaH+3ahq1OMwgdIGA1UdIwSByjCBx6GBwaSBvjCBuzEkMCIGA1UEBxMb
+VmFsaUNlcnQgVmFsaWRhdGlvbiBOZXR3b3JrMRcwFQYDVQQKEw5WYWxpQ2VydCwg
+SW5jLjE1MDMGA1UECxMsVmFsaUNlcnQgQ2xhc3MgMiBQb2xpY3kgVmFsaWRhdGlv
+biBBdXRob3JpdHkxITAfBgNVBAMTGGh0dHA6Ly93d3cudmFsaWNlcnQuY29tLzEg
+MB4GCSqGSIb3DQEJARYRaW5mb0B2YWxpY2VydC5jb22CAQEwDwYDVR0TAQH/BAUw
+AwEB/zAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmdv
+ZGFkZHkuY29tMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jZXJ0aWZpY2F0ZXMu
+Z29kYWRkeS5jb20vcmVwb3NpdG9yeS9yb290LmNybDBLBgNVHSAERDBCMEAGBFUd
+IAAwODA2BggrBgEFBQcCARYqaHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNv
+bS9yZXBvc2l0b3J5MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOBgQC1
+QPmnHfbq/qQaQlpE9xXUhUaJwL6e4+PrxeNYiY+Sn1eocSxI0YGyeR+sBjUZsE4O
+WBsUs5iB0QQeyAfJg594RAoYC5jcdnplDQ1tgMQLARzLrUc+cb53S8wGd9D0Vmsf
+SxOaFIqII6hR8INMqzW/Rn453HWkrugp++85j09VZw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
+IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
+BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
+aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
+9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
+NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
+azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
+Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
+cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
+dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
+WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
+v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
+UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
+IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
+W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
+-----END CERTIFICATE-----

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/gridftp.conf
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/gridftp.conf	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/gridftp.conf	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,3 @@
+port 2811
+banner "DemoGrid GridFTP"
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/myproxy-server.config
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/myproxy-server.config	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/myproxy-server.config	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,8 @@
+authorized_retrievers "*"
+pam  "sufficient"
+certificate_issuer_cert /var/lib/globus/simple_ca/cacert.pem
+certificate_issuer_key /var/lib/globus/simple_ca/private/cakey.pem
+certificate_issuer_key_passphrase "cagrid"
+certificate_serialfile /var/lib/globus/simple_ca/serial
+certificate_out_dir /var/lib/globus/simple_ca/newcerts
+certificate_mapapp /var/lib/myproxy/myproxy-certificate-mapapp
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/xinetd.myproxy
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/xinetd.myproxy	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/files/default/xinetd.myproxy	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,9 @@
+service myproxy-server
+{
+ socket_type  = stream
+ protocol     = tcp
+ wait         = no
+ user         = root
+ server       = /usr/sbin/myproxy-server
+ disable      = no
+}

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/metadata.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/metadata.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/metadata.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,6 @@
+maintainer       "YOUR_COMPANY_NAME"
+maintainer_email "YOUR_EMAIL"
+license          "All rights reserved"
+description      "Installs/Configures globus"
+long_description IO.read(File.join(File.dirname(__FILE__), 'README.rdoc'))
+version          "0.0.1"

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/client-tools.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/client-tools.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/client-tools.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,33 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: Globus Toolkit 5.1.1 client tools
+##
+## This recipe installs only the Globus client tools (grid-proxy-init,
+## myproxy-logon, globus-url-copy, etc.). GridFTP, GRAM, etc. are set up 
+## in separate recipes.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include_recipe "globus::repository"
+
+package "globus-gsi-cert-utils-progs"
+package "globus-proxy-utils"
+package "globus-gass-copy-progs"
+package "gsi-openssh-clients"
+package "myproxy"

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/default.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/default.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/default.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,23 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# RECIPE: Default recipe.
+#
+# This cookbook has no default recipe.
+#
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gc-cert.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gc-cert.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gc-cert.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,70 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: GC certificate
+##
+## 
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+require "openssl"
+
+include_recipe "globus::go_cert"
+
+gp_domain = node[:topology][:domains][node[:domain_id]]
+gp_node   = gp_domain[:nodes][node[:node_id]]
+
+cookbook_file "/etc/grid-security/anon.cert" do
+  source "anon.cert"
+  mode 0644
+  owner "root"
+  group "root"
+end
+
+cookbook_file "/etc/grid-security/anon.key" do
+  source "anon.key"
+  mode 0400
+  owner "root"
+  group "root"
+end
+
+ruby_block "get_gc_certificate" do
+  cert_file = "/etc/grid-security/gc-cert-#{gp_node[:gc_setupkey]}.pem"
+  key_file = "/etc/grid-security/gc-key-#{gp_node[:gc_setupkey]}.pem"
+  only_if do ! File.exists?(cert_file) end
+  block do
+    begin
+      ENV["X509_USER_CERT"]="/etc/grid-security/anon.cert"
+      ENV["X509_USER_KEY"]="/etc/grid-security/anon.key"
+      cert_blob = `gsissh -F /dev/null -o "GSSApiTrustDns no" -o "ServerAliveInterval 15" -o "ServerAliveCountMax 8" relay.globusonline.org -p 2223 register #{gp_node[:gc_setupkey]}`
+
+      cert = OpenSSL::X509::Certificate.new(cert_blob)
+      cert_f = File.new(cert_file, 'w')
+      cert_f.write(cert.to_pem)
+      cert_f.chmod(0644)
+    
+      key = OpenSSL::PKey::RSA.new(cert_blob)
+      key_f = File.new(key_file, 'w')
+      key_f.write(key.to_pem)
+      key_f.chmod(0400)
+    rescue
+      # TODO: Find a way to communicate to GP that this has happened,
+      #       so it can be reported to the user.
+      p "Unable to obtain GC certificate"
+    end
+  end
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/go_cert.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/go_cert.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/go_cert.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,78 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: GO CA certificates
+##
+## This recipe installs the certificates of CAs that sign the various GO
+## certificates (user certificates, the Transfer API server, etc.)
+##
+## This recipe must be applied to any node that will be interacting with 
+## a GO service.
+## 
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# Create the grid-security directory
+
+directory "/etc/grid-security" do
+  owner "root"
+  group "root"
+  mode "0755"
+  action :create
+end
+
+directory "/etc/grid-security/certificates" do
+  owner "root"
+  group "root"
+  mode "0755"
+  action :create
+end
+
+cookbook_file "/etc/grid-security/certificates/d1b603c3.0" do
+  source "d1b603c3.0"
+  mode 0644
+  owner "root"
+  group "root"
+end
+
+cookbook_file "/etc/grid-security/certificates/d1b603c3.signing_policy" do
+  source "d1b603c3.signing_policy"
+  mode 0644
+  owner "root"
+  group "root"
+end
+
+cookbook_file "/etc/grid-security/certificates/4396eb4d.0" do
+  source "4396eb4d.0"
+  mode 0644
+  owner "root"
+  group "root"
+end
+
+cookbook_file "/etc/grid-security/certificates/4396eb4d.signing_policy" do
+  source "4396eb4d.signing_policy"
+  mode 0644
+  owner "root"
+  group "root"
+end
+
+cookbook_file "/etc/grid-security/certificates/gd-bundle_ca.cert" do
+  source "gd-bundle_ca.cert"
+  mode 0644
+  owner "root"
+  group "root"
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gridftp-common.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gridftp-common.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gridftp-common.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: Globus Toolkit 5.1.1 GridFTP
+##
+## This recipe installs the GridFTP server and sets it up as a xinetd service.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include_recipe "globus::repository"
+
+package "xinetd"
+package "globus-gridftp-server-progs"
+package "libglobus-xio-gsi-driver-dev"
+
+cookbook_file "/etc/gridftp.conf.default" do
+  source "gridftp.conf"
+  mode 0644
+  owner "root"
+  group "root"
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gridftp-default.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gridftp-default.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gridftp-default.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,42 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: Globus Toolkit 5.1.1 GridFTP
+##
+## This recipe installs the GridFTP server and sets it up as a xinetd service.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+gp_domain = node[:topology][:domains][node[:domain_id]]
+gp_node   = gp_domain[:nodes][node[:node_id]]
+
+include_recipe "globus::gridftp-common"
+
+template "/etc/xinetd.d/gsiftp" do
+  source "xinetd.gridftp.erb"
+  mode 0644
+  owner "root"
+  group "root"
+  variables(
+    :public_ip => gp_node[:public_ip],
+    :gc        => false
+  )
+  notifies :restart, "service[xinetd]"
+end
+
+service "xinetd"

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gridftp-gc.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gridftp-gc.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/gridftp-gc.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,44 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: Globus Toolkit 5.1.1 GridFTP
+##
+## This recipe installs the GridFTP server and sets it up as a xinetd service.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include_recipe "globus::gc-cert"
+include_recipe "globus::gridftp-common"
+
+gp_domain = node[:topology][:domains][node[:domain_id]]
+gp_node   = gp_domain[:nodes][node[:node_id]]
+
+template "/etc/xinetd.d/gsiftp" do
+  source "xinetd.gridftp.erb"
+  mode 0644
+  owner "root"
+  group "root"
+  variables(
+    :public_ip   => gp_node[:public_ip],
+    :gc          => true,
+    :gc_setupkey => gp_node[:gc_setupkey]
+  )
+  notifies :restart, "service[xinetd]"
+end
+
+service "xinetd"

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/myproxy.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/myproxy.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/myproxy.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,77 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: Globus Toolkit 5.1.1 MyProxy
+##
+## Installs a MyProxy server, and sets is up as a xinetd service.
+##
+## For authentication, the MyProxy server will use the local UNIX accounts
+## through PAM. If the node this recipe is applied to is part of a NIS
+## domain, then the global NIS accounts will be used.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include_recipe "globus::repository"
+
+package "xinetd"
+package "globus-simple-ca"
+package "myproxy-server"
+
+directory "/var/lib/myproxy" do
+  owner "root"
+  group "root"
+  mode "0700"
+  action :create
+end
+
+
+cookbook_file "/etc/myproxy-server.config" do
+  source "myproxy-server.config"
+  mode 0644
+  owner "root"
+  group "root"
+end
+
+template "/var/lib/myproxy/myproxy-certificate-mapapp" do
+  source "myproxy-dnmap.erb"
+  mode 0744
+  owner "root"
+  group "root"
+end
+
+cookbook_file "/etc/xinetd.d/myproxy" do
+  source "xinetd.myproxy"
+  mode 0644
+  owner "root"
+  group "root"
+  notifies :restart, "service[xinetd]"
+end
+
+execute "add_services_entry" do
+  line = "myproxy-server  7512/tcp                        # Myproxy server"
+  only_if do
+    File.read("/etc/services").index(line).nil?
+  end  
+  user "root"
+  group "root"
+  command "echo \"#{line}\" >> /etc/services"
+  action :run
+  notifies :restart, "service[xinetd]"
+end
+
+service "xinetd"

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/repository.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/repository.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/recipes/repository.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,65 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: Globus Toolkit 5.1.1 repository
+##
+## Adds the APT sources list for the Globus Toolkit 5.1.1
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+case node.platform
+  when "ubuntu"
+    if node.platform_version == "11.04"
+      distro_id = "natty"
+    elsif node.platform_version == "10.10"
+      distro_id = "maverick"
+    elsif node.platform_version == "10.04"
+      distro_id = "lenny"
+    end
+
+  when "debian"
+    if node.platform_version.to_f >= 6.0
+      distro_id = "squeeze"
+    elsif node.platform_version.to_f >= 5.0
+      distro_id = "lenny"
+    end
+    
+end
+
+remote_file "#{node[:scratch_dir]}/gt5_repository.deb" do
+  action :create_if_missing 
+  source "http://www.globus.org/ftppub/gt5/5.1/5.1.1/installers/repo/globus-repository-#{distro_id}_0.0.1_all.deb"
+  owner "root"
+  group "root"    
+  mode "0644"
+end
+
+package "gt5_repository" do
+  action :install
+  source "#{node[:scratch_dir]}/gt5_repository.deb"
+  provider Chef::Provider::Package::Dpkg
+  notifies :run, "execute[apt-get update]", :immediately
+end
+
+execute "apt-get update" do
+ user "root"
+ group "root"
+ command "apt-get update"
+ action :nothing
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates/default/myproxy-dnmap.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates/default/myproxy-dnmap.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates/default/myproxy-dnmap.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+username=$1
+if [ X"$username" = X ]; then
+    # no username given
+    exit 1
+fi
+
+# DN must match the signing policy for your CA.
+echo "/O=Grid/OU=DemoGrid/CN=${username}"
+
+exit 0

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates/default/xinetd.gram.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates/default/xinetd.gram.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates/default/xinetd.gram.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,13 @@
+service gsigatekeeper
+{
+    socket_type = stream
+    protocol = tcp
+    wait = no
+    user = root
+    env += GLOBUS_LOCATION=<%= @globus_location %>
+    env += LD_LIBRARY_PATH=<%= @globus_location %>/lib
+    env += LD_LIBRARY_PATH=GLOBUS_LOCATION/lib
+    server = <%= @globus_location %>/sbin/globus-gatekeeper
+    server_args = -conf <%= @globus_location %>/etc/globus-gatekeeper.conf
+    disable = no
+}

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates/default/xinetd.gridftp.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates/default/xinetd.gridftp.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/globus/templates/default/xinetd.gridftp.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,21 @@
+service gsiftp
+             {
+             instances               = 50
+             socket_type             = stream
+             wait                    = no
+             user                    = root     
+             server                  = /usr/sbin/globus-gridftp-server
+             <% if @public_ip %>
+             server_args             = -i  --data-interface <%= @public_ip %>
+             <% else %>
+             server_args             = -i
+             <% end %>
+             <% if @gc %>
+             env                     += X509_USER_CERT=/etc/grid-security/gc-cert-<%= @gc_setupkey %>.pem
+             env                     += X509_USER_KEY=/etc/grid-security/gc-key-<%= @gc_setupkey %>.pem
+             <% end %>
+             env                     += GLOBUS_TCP_PORT_RANGE=50000,51000
+             log_on_success          += DURATION
+             nice                    = 10
+             disable                 = no
+             }

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/README.md
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/README.md	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/README.md	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,102 @@
+Description
+===========
+
+Installs a Java. Uses OpenJDK by default but supports installation of the Sun's Java.
+
+---
+Requirements
+============
+
+Platform
+--------
+
+* Debian, Ubuntu
+* CentOS, Red Hat, Fedora
+
+Cookbooks
+---------
+
+* apt
+
+---
+Attributes
+==========
+
+* `node["java"]["install_flavor"]` - Flavor of JVM you would like installed (`sun` or `openjdk`), default `openjdk`.
+
+---
+Recipes
+=======
+
+default
+-------
+
+Include the default recipe in a run list, to get `java`.  By default the `openjdk` flavor of Java is installed, but this can be changed by using the `install_flavor` attribute.
+
+openjdk
+-------
+
+This recipe installs the `openjdk` flavor of Java.
+
+sun
+---
+
+This recipe installs the `sun` flavor of Java.  
+
+On Debian and Ubuntu systems the recipe will add the correct apt repository (`non-free` on Debian or `partner` on Ubuntu), pre-seed the package and update java alternatives.
+
+On Red Hat flavored Linux (RHEL, CentOS, Fedora), the installation of the Sun flavor of Java is slightly more complicated as the `rpm` package is not readily available in any public Yum repository.  The Sun JDK `rpm` package can be downloaded directly from Sun but comes wrapped as a compressed bin file.  After the file has been downloaded, decompressed and license accepted the `rpm` package (names something like `jdk-6u25-ea-linux-amd64.rpm`) can be retrieved by this recipe using the `remote_file` or `cookbook_file` resources.  The recipe will choose the correct resource based on the existence (or non-existence) of the `node['sun']['rpm_url']` attribute.  See below for an example role using this attribute in the proper way.  If you would like to deliver the `rpm` package file as part of this cookbook place the `rpm` package file in the `files/default` directory and the cookbook will retrieve the file during installation.
+
+---
+Usage
+=====
+
+Simply include the `java` recipe where ever you would like Java installed.  
+
+To install Sun flavored Java on Debian or Ubuntu override the `node['java']['install_flavor']` attribute with in role:
+
+    name "java"
+    description "Install Sun Java on Ubuntu"
+    override_attributes(
+      "java" => {
+        "install_flavor" => "sun"
+      }
+    )
+    run_list(
+      "recipe[java]"
+    )
+
+On RedHat flavored Linux be sure to set the `rpm_url` and `rpm_checksum` attributes if you placed the `rpm` file on a remote server:
+
+    name "java"
+    description "Install Sun Java on CentOS"
+    override_attributes(
+      "java" => {
+        "install_flavor" => "sun",
+        "version" => "6u25",
+        "rpm_url" => "https://mycompany.s3.amazonaws.com/sun_jdk",
+        "rpm_checksum" => "c473e3026f991e617710bad98f926435959303fe084a5a31140ad5ad75d7bf13"
+      }
+    )
+    run_list(
+      "recipe[java]"
+    )
+
+License and Author
+==================
+
+Author:: Seth Chisamore (<schisamo at opscode.com>)
+
+Copyright:: 2008-2011, Opscode, Inc
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/attributes/default.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/attributes/default.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/attributes/default.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,29 @@
+#
+# Author:: Seth Chisamore (<schisamo at opscode.com>)
+# Cookbook Name:: java
+# Attributes:: default
+#
+# Copyright 2010, Opscode, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+default['java']['install_flavor'] = "sun"
+
+case platform
+when "centos","redhat","fedora"
+  default['java']['version'] = "6u25"
+  default['java']['arch'] = kernel['machine'] =~ /x86_64/ ? "amd64" : "i586"
+  set['java']['java_home'] = "/usr/lib/jvm/java"
+else
+  set['java']['java_home'] = "/usr/lib/jvm/default-java"
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/files/default/java.seed
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/files/default/java.seed	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/files/default/java.seed	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,11 @@
+sun-java6-bin	shared/accepted-sun-dlj-v1-1	boolean	true
+sun-java6-jdk	shared/accepted-sun-dlj-v1-1	boolean	true
+sun-java6-jre	shared/accepted-sun-dlj-v1-1	boolean	true
+sun-java6-jre	sun-java6-jre/stopthread	boolean	true
+sun-java6-jre	sun-java6-jre/jcepolicy	note
+sun-java6-bin	shared/error-sun-dlj-v1-1	error
+sun-java6-jdk	shared/error-sun-dlj-v1-1	error
+sun-java6-jre	shared/error-sun-dlj-v1-1	error
+sun-java6-bin	shared/present-sun-dlj-v1-1	note
+sun-java6-jdk	shared/present-sun-dlj-v1-1	note
+sun-java6-jre	shared/present-sun-dlj-v1-1	note
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/metadata.json
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/metadata.json	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/metadata.json	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,50 @@
+{
+  "name": "java",
+  "description": "Installs Java runtime.",
+  "long_description": "Description\n===========\n\nInstalls a Java. Uses OpenJDK by default but supports installation of the Sun's Java.\n\n---\nRequirements\n============\n\nPlatform\n--------\n\n* Debian, Ubuntu\n* CentOS, Red Hat, Fedora\n\nCookbooks\n---------\n\n* apt\n\n---\nAttributes\n==========\n\n* `node[\"java\"][\"install_flavor\"]` - Flavor of JVM you would like installed (`sun` or `openjdk`), default `openjdk`.\n\n---\nRecipes\n=======\n\ndefault\n-------\n\nInclude the default recipe in a run list, to get `java`.  By default the `openjdk` flavor of Java is installed, but this can be changed by using the `install_flavor` attribute.\n\nopenjdk\n-------\n\nThis recipe installs the `openjdk` flavor of Java.\n\nsun\n---\n\nThis recipe installs the `sun` flavor of Java.  \n\nOn Debian and Ubuntu systems the recipe will add the correct apt repository (`non-free` on Debian or `partner` on Ubuntu), pre-seed the package and update java alternatives.\n\nOn Red Hat flavor
 ed Linux (RHEL, CentOS, Fedora), the installation of the Sun flavor of Java is slightly more complicated as the `rpm` package is not readily available in any public Yum repository.  The Sun JDK `rpm` package can be downloaded directly from Sun but comes wrapped as a compressed bin file.  After the file has been downloaded, decompressed and license accepted the `rpm` package (names something like `jdk-6u25-ea-linux-amd64.rpm`) can be retrieved by this recipe using the `remote_file` or `cookbook_file` resources.  The recipe will choose the correct resource based on the existence (or non-existence) of the `node['sun']['rpm_url']` attribute.  See below for an example role using this attribute in the proper way.  If you would like to deliver the `rpm` package file as part of this cookbook place the `rpm` package file in the `files/default` directory and the cookbook will retrieve the file during installation.\n\n---\nUsage\n=====\n\nSimply include the `java` recipe where ever you
  would like Java installed.  \n\nTo install Sun flavored Java on Debian or Ubuntu override the `node['java']['install_flavor']` attribute with in role:\n\n    name \"java\"\n    description \"Install Sun Java on Ubuntu\"\n    override_attributes(\n      \"java\" => {\n        \"install_flavor\" => \"sun\"\n      }\n    )\n    run_list(\n      \"recipe[java]\"\n    )\n\nOn RedHat flavored Linux be sure to set the `rpm_url` and `rpm_checksum` attributes if you placed the `rpm` file on a remote server:\n\n    name \"java\"\n    description \"Install Sun Java on CentOS\"\n    override_attributes(\n      \"java\" => {\n        \"install_flavor\" => \"sun\",\n        \"version\" => \"6u25\",\n        \"rpm_url\" => \"https://mycompany.s3.amazonaws.com/sun_jdk\",\n        \"rpm_checksum\" => \"c473e3026f991e617710bad98f926435959303fe084a5a31140ad5ad75d7bf13\"\n      }\n    )\n    run_list(\n      \"recipe[java]\"\n    )\n\nLicense and Author\n==================\n\nAuthor:: Seth Chi
 samore (<schisamo at opscode.com>)\n\nCopyright:: 2008-2011, Opscode, Inc\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
+  "maintainer": "Opscode, Inc.",
+  "maintainer_email": "cookbooks at opscode.com",
+  "license": "Apache 2.0",
+  "platforms": {
+    "debian": [
+
+    ],
+    "ubuntu": [
+
+    ],
+    "centos": [
+
+    ],
+    "redhat": [
+
+    ],
+    "fedora": [
+
+    ]
+  },
+  "dependencies": {
+    "apt": [
+
+    ]
+  },
+  "recommendations": {
+  },
+  "suggestions": {
+  },
+  "conflicting": {
+  },
+  "providing": {
+  },
+  "replacing": {
+  },
+  "attributes": {
+  },
+  "groupings": {
+  },
+  "recipes": {
+    "java": "Installs Java runtime",
+    "java::openjdk": "Installs the OpenJDK flavor of Java",
+    "java::sun": "Installs the Sun flavor of Java"
+  },
+  "version": "1.1.0"
+}
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/metadata.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/metadata.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/metadata.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,16 @@
+maintainer        "Opscode, Inc."
+maintainer_email  "cookbooks at opscode.com"
+license           "Apache 2.0"
+description       "Installs Java runtime."
+long_description  IO.read(File.join(File.dirname(__FILE__), 'README.md'))
+version           "1.1"
+
+depends "apt"
+
+recipe "java", "Installs Java runtime"
+recipe "java::openjdk", "Installs the OpenJDK flavor of Java"
+recipe "java::sun", "Installs the Sun flavor of Java"
+
+%w{ debian ubuntu centos redhat fedora }.each do |os|
+  supports os
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/recipes/default.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/recipes/default.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/recipes/default.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,21 @@
+#
+# Author:: Seth Chisamore (<schisamo at opscode.com>)
+# Cookbook Name:: java
+# Recipe:: default
+#
+# Copyright 2008-2011, Opscode, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+include_recipe "java::#{node['java']['install_flavor']}"

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/recipes/openjdk.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/recipes/openjdk.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/recipes/openjdk.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,39 @@
+#
+# Author:: Seth Chisamore (<schisamo at opscode.com>)
+# Cookbook Name:: java
+# Recipe:: openjdk
+#
+# Copyright 2010-2011, Opscode, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+pkgs = value_for_platform(
+  ["centos","redhat","fedora"] => {
+    "default" => ["java-1.6.0-openjdk","java-1.6.0-openjdk-devel"]
+  },
+  "default" => ["openjdk-6-jdk","default-jdk"]
+)
+
+execute "update-java-alternatives" do
+  command "update-java-alternatives -s java-6-openjdk"
+  returns [0,2]
+  action :nothing
+  only_if { platform?("ubuntu", "debian") }
+end
+
+pkgs.each do |pkg|
+  package pkg do
+    action :install
+    notifies :run, "execute[update-java-alternatives]"
+  end
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/recipes/sun.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/recipes/sun.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/java/recipes/sun.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,93 @@
+#
+# Author:: Seth Chisamore (<schisamo at opscode.com>)
+# Cookbook Name:: java
+# Recipe:: sun
+#
+# Copyright 2010-2011, Opscode, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+pkgs = value_for_platform(
+  ["centos","redhat","fedora"] => {
+    "default" => ["jdk-#{node['java']['version']}-ea-linux-#{node['java']['arch']}.rpm"]
+  },
+  ["debian","ubuntu"] => {
+    "default" => ["sun-java6-jdk"]
+  }
+)
+
+case node['platform']
+when "ubuntu"
+
+  apt_repository "ubuntu-partner" do
+    uri "http://archive.canonical.com/ubuntu"
+    distribution node['lsb']['codename']
+    components ['partner']
+    action :add
+  end
+  # update-java-alternatives doesn't work with only sun java installed
+  node.set['java']['java_home'] = "/usr/lib/jvm/java-6-sun"
+
+when "debian"
+
+  apt_repository "debian-non-free" do
+    uri "http://http.us.debian.org/debian"
+    distribution "stable"
+    components ['main','contrib','non-free']
+    action :add
+  end
+  # update-java-alternatives doesn't work with only sun java installed
+  node.set['java']['java_home'] = "/usr/lib/jvm/java-6-sun"
+
+when "centos", "redhat", "fedora"
+
+  pkgs.each do |pkg|
+    if node['java'].attribute?('rpm_url')
+      remote_file "#{Chef::Config[:file_cache_path]}/#{pkg}" do
+        source "#{node['java']['rpm_url']}/#{pkg}"
+        checksum node['java']['rpm_checksum']
+        mode "0644"
+      end
+    else
+      cookbook_file "#{Chef::Config[:file_cache_path]}/#{pkg}" do
+        source pkg
+        mode "0644"
+        action :create_if_missing
+      end
+    end
+  end
+
+else
+  Chef::Log.error("Installation of Sun Java packages not supported on this platform.")
+end
+
+execute "update-java-alternatives" do
+  command "update-java-alternatives -s java-6-sun"
+  returns [0,2]
+  action :nothing
+  only_if { platform?("ubuntu", "debian") }
+end
+
+pkgs.each do |pkg|
+  package pkg do
+    case node['platform']
+    when "ubuntu", "debian"
+      response_file "java.seed"
+    when "centos", "redhat", "fedora"
+      source "#{Chef::Config[:file_cache_path]}/#{pkg}" 
+      options "--nogpgcheck" # sun/oracle doesn't sign their RPMs o_O
+    end
+    action :install
+    notifies :run, "execute[update-java-alternatives]"
+  end
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/README.rdoc
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/README.rdoc	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/README.rdoc	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,49 @@
+= DESCRIPTION:
+
+Installs and configures postgresql client or server.
+
+= REQUIREMENTS:
+
+== Platform:
+
+Tested on CentOS 5.5, Ubuntu 10.04 but should support centos, redhat, fedora, suse, ubuntu and debian.
+
+== Cookbooks:
+
+= ATTRIBUTES: 
+
+* postgresql[:dir] - configuration file location.
+* postgresql[:version] - Version of postgresql to use. Configured in attributes based on platform.
+* postgresql[:ssl] - used on debian family installs to enable ssl support. The debian post installation script automatically builds the certificates.
+
+= USAGE:
+
+For clients:
+
+  include_recipe "postgresql::client"
+  
+For server: 
+
+  include_recipe "postgresql::server"
+  
+(client is already included by server). This will check the platform that the node is and include either redhat family recipe (postgresql::server_redhat) or debian family (postgresql::server_debian) because the two styles differ quite a bit.
+
+The templates provided by this cookbook will probably need to be tweaked for the local environment, no tuning parameters are specified in them. The templates are separated by family designation in the template directory, since Chef doesn't do "platform family" style file specificity.
+
+= LICENSE and AUTHOR:
+      
+Author:: Joshua Timberman (<joshua at opscode.com>)
+
+Copyright:: 2009-2010, Opscode, Inc
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/attributes/default.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/attributes/default.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/attributes/default.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,68 @@
+#
+# Cookbook Name:: postgresql
+# Attributes:: postgresql
+#
+# Copyright 2008-2009, Opscode, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+case platform
+when "debian"
+
+  if platform_version.to_f == 5.0
+    default[:postgresql][:version] = "8.3"
+  elsif platform_version =~ /.*sid/
+    default[:postgresql][:version] = "8.4"
+  end
+
+  set[:postgresql][:dir] = "/etc/postgresql/#{node[:postgresql][:version]}/main"
+
+when "ubuntu"
+
+  if platform_version.to_f <= 9.04
+    default[:postgresql][:version] = "8.3"
+  else
+    default[:postgresql][:version] = "8.4"
+  end
+
+  set[:postgresql][:dir] = "/etc/postgresql/#{node[:postgresql][:version]}/main"
+
+when "fedora"
+
+  if platform_version.to_f <= 12
+    default[:postgresql][:version] = "8.3"
+  else
+    default[:postgresql][:version] = "8.4"
+  end
+
+  set[:postgresql][:dir] = "/var/lib/pgsql/data"
+
+when "redhat","centos"
+
+  default[:postgresql][:version] = "8.4"
+  set[:postgresql][:dir] = "/var/lib/pgsql/data"
+
+when "suse"
+
+  if platform_version.to_f <= 11.1
+    default[:postgresql][:version] = "8.3"
+  else
+    default[:postgresql][:version] = "8.4"
+  end
+
+  set[:postgresql][:dir] = "/var/lib/pgsql/data"
+
+else
+  default[:postgresql][:version] = "8.4"
+  set[:postgresql][:dir]            = "/etc/postgresql/#{node[:postgresql][:version]}/main"
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/metadata.json
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/metadata.json	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/metadata.json	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,51 @@
+{
+  "name": "postgresql",
+  "description": "Installs and configures postgresql for clients or servers",
+  "long_description": "= DESCRIPTION:\n\nInstalls and configures postgresql client or server.\n\n= REQUIREMENTS:\n\n== Platform:\n\nTested on CentOS 5.5, Ubuntu 10.04 but should support centos, redhat, fedora, suse, ubuntu and debian.\n\n== Cookbooks:\n\n= ATTRIBUTES: \n\n* postgresql[:dir] - configuration file location.\n* postgresql[:version] - Version of postgresql to use. Configured in attributes based on platform.\n* postgresql[:ssl] - used on debian family installs to enable ssl support. The debian post installation script automatically builds the certificates.\n\n= USAGE:\n\nFor clients:\n\n  include_recipe \"postgresql::client\"\n  \nFor server: \n\n  include_recipe \"postgresql::server\"\n  \n(client is already included by server). This will check the platform that the node is and include either redhat family recipe (postgresql::server_redhat) or debian family (postgresql::server_debian) because the two styles differ quite a bit.\n\nThe templates provided by this co
 okbook will probably need to be tweaked for the local environment, no tuning parameters are specified in them. The templates are separated by family designation in the template directory, since Chef doesn't do \"platform family\" style file specificity.\n\n= LICENSE and AUTHOR:\n      \nAuthor:: Joshua Timberman (<joshua at opscode.com>)\n\nCopyright:: 2009-2010, Opscode, Inc\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
+  "maintainer": "Opscode, Inc.",
+  "maintainer_email": "cookbooks at opscode.com",
+  "license": "Apache 2.0",
+  "platforms": {
+    "rhel": [
+
+    ],
+    "centos": [
+
+    ],
+    "fedora": [
+
+    ],
+    "ubuntu": [
+
+    ],
+    "debian": [
+
+    ],
+    "suse": [
+
+    ]
+  },
+  "dependencies": {
+  },
+  "recommendations": {
+  },
+  "suggestions": {
+  },
+  "conflicting": {
+  },
+  "providing": {
+  },
+  "replacing": {
+  },
+  "attributes": {
+  },
+  "groupings": {
+  },
+  "recipes": {
+    "postgresql": "Empty, use one of the other recipes",
+    "postgresql::client": "Installs postgresql client package(s)",
+    "postgresql::server": "Installs postgresql server packages, debian family style",
+    "postgresql::redhat": "Installs postgresql server packages, redhat family style"
+  },
+  "version": "0.11.1"
+}
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/metadata.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/metadata.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/metadata.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,15 @@
+maintainer        "Opscode, Inc."
+maintainer_email  "cookbooks at opscode.com"
+license           "Apache 2.0"
+description       "Installs and configures postgresql for clients or servers"
+long_description  IO.read(File.join(File.dirname(__FILE__), 'README.rdoc'))
+version           "0.11.1"
+recipe            "postgresql", "Empty, use one of the other recipes"
+recipe            "postgresql::client", "Installs postgresql client package(s)"
+recipe            "postgresql::server", "Installs postgresql server packages, templates"
+recipe            "postgresql::redhat", "Installs postgresql server packages, redhat family style"
+recipe            "postgresql::server", "Installs postgresql server packages, debian family style"
+
+%w{rhel centos fedora ubuntu debian suse}.each do |os|
+  supports os
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/client.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/client.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/client.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,27 @@
+#
+# Cookbook Name:: postgresql
+# Recipe:: client
+#
+# Copyright 2009, Opscode, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+case node.platform
+when "ubuntu","debian"
+  package "postgresql-client"
+when "fedora","suse"
+  package "postgresql-devel"
+when "redhat","centos"
+  package "postgresql#{node.postgresql.version.split('.').join}-devel"
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/default.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/default.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/default.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,20 @@
+#
+# Cookbook Name:: postgresql
+# Recipe:: default
+#
+# Copyright 2009, Opscode, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+include_recipe "postgresql::client"

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/server.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/server.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/server.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,36 @@
+#/postgresql.conf.
+# Cookbook Name:: postgresql
+# Recipe:: server
+#
+# Copyright 2009-2010, Opscode, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+include_recipe "postgresql::client"
+
+case node[:postgresql][:version]
+when "8.3"
+  node.default[:postgresql][:ssl] = "off"
+when "8.4"
+  node.default[:postgresql][:ssl] = "true"
+end
+
+# Include the right "family" recipe for installing the server
+# since they do things slightly differently.
+case node.platform
+when "redhat", "centos", "fedora", "suse"
+  include_recipe "postgresql::server_redhat"
+when "debian", "ubuntu"
+  include_recipe "postgresql::server_debian"
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/server_debian.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/server_debian.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/server_debian.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,62 @@
+#/postgresql.conf.
+# Cookbook Name:: postgresql
+# Recipe:: server
+#
+# Copyright 2009-2010, Opscode, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+include_recipe "postgresql::client"
+
+case node[:postgresql][:version]
+when "8.3"
+  node.default[:postgresql][:ssl] = "off"
+when "8.4"
+  node.default[:postgresql][:ssl] = "true"
+end
+
+package "postgresql"
+
+case node.platform
+  when "ubuntu"
+    if node.platform_version.to_f >= 11.04
+		postgresql_service = "postgresql"
+	else
+		postgresql_service = "postgresql-#{node.postgresql.version}"
+    end    
+  when "debian"
+	postgresql_service = "postgresql-#{node.postgresql.version}"
+end
+
+service "postgresql" do
+  service_name postgresql_service
+  supports :restart => true, :status => true, :reload => true
+  action :nothing
+end
+
+template "#{node[:postgresql][:dir]}/pg_hba.conf" do
+  source "debian.pg_hba.conf.erb"
+  owner "postgres"
+  group "postgres"
+  mode 0600
+  notifies :reload, resources(:service => "postgresql")
+end
+
+template "#{node[:postgresql][:dir]}/postgresql.conf" do
+  source "debian.postgresql.conf.erb"
+  owner "postgres"
+  group "postgres"
+  mode 0600
+  notifies :restart, resources(:service => "postgresql")
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/server_redhat.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/server_redhat.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/recipes/server_redhat.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,84 @@
+#/postgresql.conf.
+# Cookbook Name:: postgresql
+# Recipe:: server
+#
+# Copyright 2009-2010, Opscode, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+include_recipe "postgresql::client"
+
+# Create a group and user like the package will.
+# Otherwise the templates fail.
+
+group "postgres" do
+  # Workaround lack of option for -r and -o...
+  group_name "-r -o postgres"
+  not_if { Etc.getgrnam("postgres") }
+  gid 26
+end
+
+user "postgres" do
+  # Workaround lack of option for -M and -n...
+  username "-M -n postgres"
+  not_if { Etc.getpwnam("postgres") }
+  shell "/bin/bash"
+  comment "PostgreSQL Server"
+  home "/var/lib/pgsql"
+  gid "postgres"
+  system true
+  uid 26
+  supports :non_unique => true
+end
+
+package "postgresql" do
+  case node.platform
+  when "redhat","centos"
+    package_name "postgresql#{node.postgresql.version.split('.').join}"
+  else
+    package_name "postgresql"
+  end
+end
+
+case node.platform
+when "redhat","centos"
+  package "postgresql#{node.postgresql.version.split('.').join}-server"
+when "fedora","suse"
+  package "postgresql-server"
+end
+
+execute "/sbin/service postgresql initdb" do
+  not_if { ::FileTest.exist?(File.join(node.postgresql.dir, "PG_VERSION")) }
+end
+
+service "postgresql" do
+  supports :restart => true, :status => true, :reload => true
+  action [:enable, :start]
+end
+
+template "#{node[:postgresql][:dir]}/pg_hba.conf" do
+  source "redhat.pg_hba.conf.erb"
+  owner "postgres"
+  group "postgres"
+  mode 0600
+  notifies :reload, resources(:service => "postgresql")
+end
+
+template "#{node[:postgresql][:dir]}/postgresql.conf" do
+  source "redhat.postgresql.conf.erb"
+  owner "postgres"
+  group "postgres"
+  mode 0600
+  notifies :restart, resources(:service => "postgresql")
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/debian.pg_hba.conf.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/debian.pg_hba.conf.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/debian.pg_hba.conf.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,83 @@
+# PostgreSQL Client Authentication Configuration File
+# ===================================================
+#
+# Refer to the "Client Authentication" section in the
+# PostgreSQL documentation for a complete description
+# of this file.  A short synopsis follows.
+#
+# This file controls: which hosts are allowed to connect, how clients
+# are authenticated, which PostgreSQL user names they can use, which
+# databases they can access.  Records take one of these forms:
+#
+# local      DATABASE  USER  METHOD  [OPTION]
+# host       DATABASE  USER  CIDR-ADDRESS  METHOD  [OPTION]
+# hostssl    DATABASE  USER  CIDR-ADDRESS  METHOD  [OPTION]
+# hostnossl  DATABASE  USER  CIDR-ADDRESS  METHOD  [OPTION]
+#
+# (The uppercase items must be replaced by actual values.)
+#
+# The first field is the connection type: "local" is a Unix-domain socket,
+# "host" is either a plain or SSL-encrypted TCP/IP socket, "hostssl" is an
+# SSL-encrypted TCP/IP socket, and "hostnossl" is a plain TCP/IP socket.
+#
+# DATABASE can be "all", "sameuser", "samerole", a database name, or
+# a comma-separated list thereof.
+#
+# USER can be "all", a user name, a group name prefixed with "+", or
+# a comma-separated list thereof.  In both the DATABASE and USER fields
+# you can also write a file name prefixed with "@" to include names from
+# a separate file.
+#
+# CIDR-ADDRESS specifies the set of hosts the record matches.
+# It is made up of an IP address and a CIDR mask that is an integer
+# (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that specifies
+# the number of significant bits in the mask.  Alternatively, you can write
+# an IP address and netmask in separate columns to specify the set of hosts.
+#
+# METHOD can be "trust", "reject", "md5", "crypt", "password", "gss", "sspi",
+# "krb5", "ident", "pam" or "ldap".  Note that "password" sends passwords
+# in clear text; "md5" is preferred since it sends encrypted passwords.
+#
+# OPTION is the ident map or the name of the PAM service, depending on METHOD.
+#
+# Database and user names containing spaces, commas, quotes and other special
+# characters must be quoted. Quoting one of the keywords "all", "sameuser" or
+# "samerole" makes the name lose its special character, and just match a
+# database or username with that name.
+#
+# This file is read on server startup and when the postmaster receives
+# a SIGHUP signal.  If you edit the file on a running system, you have
+# to SIGHUP the postmaster for the changes to take effect.  You can use
+# "pg_ctl reload" to do that.
+
+# Put your actual configuration here
+# ----------------------------------
+#
+# If you want to allow non-local connections, you need to add more
+# "host" records. In that case you will also need to make PostgreSQL listen
+# on a non-local interface via the listen_addresses configuration parameter,
+# or via the -i or -h command line switches.
+#
+
+
+
+
+# DO NOT DISABLE!
+# If you change this first entry you will need to make sure that the
+# database
+# super user can access the database using some other method.
+# Noninteractive
+# access to all databases is required during automatic maintenance
+# (autovacuum, daily cronjob, replication, and similar tasks).
+#
+# Database administrative login by UNIX sockets
+local   all         postgres                          trust
+
+# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
+
+# "local" is for Unix domain socket connections only
+local   all         all                               trust
+# IPv4 local connections:
+host    all         all         127.0.0.1/32          md5
+# IPv6 local connections:
+host    all         all         ::1/128               md5

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/debian.postgresql.conf.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/debian.postgresql.conf.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/debian.postgresql.conf.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,499 @@
+# -----------------------------
+# PostgreSQL configuration file
+# -----------------------------
+#
+# This file consists of lines of the form:
+#
+#   name = value
+#
+# (The "=" is optional.)  Whitespace may be used.  Comments are introduced with
+# "#" anywhere on a line.  The complete list of parameter names and allowed
+# values can be found in the PostgreSQL documentation.
+#
+# The commented-out settings shown in this file represent the default values.
+# Re-commenting a setting is NOT sufficient to revert it to the default value;
+# you need to reload the server.
+#
+# This file is read on server startup and when the server receives a SIGHUP
+# signal.  If you edit the file on a running system, you have to SIGHUP the
+# server for the changes to take effect, or use "pg_ctl reload".  Some
+# parameters, which are marked below, require a server shutdown and restart to
+# take effect.
+#
+# Any parameter can also be given as a command-line option to the server, e.g.,
+# "postgres -c log_connections=on".  Some paramters can be changed at run time
+# with the "SET" SQL command.
+#
+# Memory units:  kB = kilobytes MB = megabytes GB = gigabytes
+# Time units:    ms = milliseconds s = seconds min = minutes h = hours d = days
+
+
+#------------------------------------------------------------------------------
+# FILE LOCATIONS
+#------------------------------------------------------------------------------
+
+# The default values of these variables are driven from the -D command-line
+# option or PGDATA environment variable, represented here as ConfigDir.
+
+data_directory = '/var/lib/postgresql/<%= node.postgresql.version -%>/main'		# use data in another directory
+					# (change requires restart)
+hba_file = '/etc/postgresql/<%= node.postgresql.version -%>/main/pg_hba.conf'	# host-based authentication file
+					# (change requires restart)
+ident_file = '/etc/postgresql/<%= node.postgresql.version -%>/main/pg_ident.conf'	# ident configuration file
+					# (change requires restart)
+
+# If external_pid_file is not explicitly set, no extra PID file is written.
+external_pid_file = '/var/run/postgresql/<%= node.postgresql.version -%>-main.pid'		# write an extra PID file
+					# (change requires restart)
+
+
+#------------------------------------------------------------------------------
+# CONNECTIONS AND AUTHENTICATION
+#------------------------------------------------------------------------------
+
+# - Connection Settings -
+
+#listen_addresses = 'localhost'		# what IP address(es) to listen on;
+					# comma-separated list of addresses;
+					# defaults to 'localhost', '*' = all
+					# (change requires restart)
+port = 5432				# (change requires restart)
+max_connections = 100			# (change requires restart)
+# Note:  Increasing max_connections costs ~400 bytes of shared memory per 
+# connection slot, plus lock space (see max_locks_per_transaction).  You might
+# also need to raise shared_buffers to support more connections.
+#superuser_reserved_connections = 3	# (change requires restart)
+unix_socket_directory = '/var/run/postgresql'		# (change requires restart)
+#unix_socket_group = ''			# (change requires restart)
+#unix_socket_permissions = 0777		# begin with 0 to use octal notation
+					# (change requires restart)
+#bonjour_name = ''			# defaults to the computer name
+					# (change requires restart)
+
+# - Security and Authentication -
+
+#authentication_timeout = 1min		# 1s-600s
+ssl = <%= node.postgresql.ssl -%>                               # (change requires restart)
+#ssl_ciphers = 'ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH'	# allowed SSL ciphers
+					# (change requires restart)
+#password_encryption = on
+#db_user_namespace = off
+
+# Kerberos and GSSAPI
+#krb_server_keyfile = ''		# (change requires restart)
+#krb_srvname = 'postgres'		# (change requires restart, Kerberos only)
+#krb_server_hostname = ''		# empty string matches any keytab entry
+					# (change requires restart, Kerberos only)
+#krb_caseins_users = off		# (change requires restart)
+#krb_realm = ''           		# (change requires restart)
+
+# - TCP Keepalives -
+# see "man 7 tcp" for details
+
+#tcp_keepalives_idle = 0		# TCP_KEEPIDLE, in seconds;
+					# 0 selects the system default
+#tcp_keepalives_interval = 0		# TCP_KEEPINTVL, in seconds;
+					# 0 selects the system default
+#tcp_keepalives_count = 0		# TCP_KEEPCNT;
+					# 0 selects the system default
+
+
+#------------------------------------------------------------------------------
+# RESOURCE USAGE (except WAL)
+#------------------------------------------------------------------------------
+
+# - Memory -
+
+shared_buffers = 24MB			# min 128kB or max_connections*16kB
+					# (change requires restart)
+#temp_buffers = 8MB			# min 800kB
+#max_prepared_transactions = 5		# can be 0 or more
+					# (change requires restart)
+# Note:  Increasing max_prepared_transactions costs ~600 bytes of shared memory
+# per transaction slot, plus lock space (see max_locks_per_transaction).
+#work_mem = 1MB				# min 64kB
+#maintenance_work_mem = 16MB		# min 1MB
+#max_stack_depth = 2MB			# min 100kB
+
+# - Free Space Map -
+
+<% if node.postgresql.version == "8.4" %>
+<% # max_fsm_pages doesn't exist on 8.4 %>
+#max_fsm_pages = 153600			# min max_fsm_relations*16, 6 bytes each
+					# (change requires restart)
+<% else %>
+max_fsm_pages = 153600			# min max_fsm_relations*16, 6 bytes each
+					# (change requires restart)
+<% end %>
+#max_fsm_relations = 1000		# min 100, ~70 bytes each
+					# (change requires restart)
+
+# - Kernel Resource Usage -
+
+#max_files_per_process = 1000		# min 25
+					# (change requires restart)
+#shared_preload_libraries = ''		# (change requires restart)
+
+# - Cost-Based Vacuum Delay -
+
+#vacuum_cost_delay = 0			# 0-1000 milliseconds
+#vacuum_cost_page_hit = 1		# 0-10000 credits
+#vacuum_cost_page_miss = 10		# 0-10000 credits
+#vacuum_cost_page_dirty = 20		# 0-10000 credits
+#vacuum_cost_limit = 200		# 1-10000 credits
+
+# - Background Writer -
+
+#bgwriter_delay = 200ms			# 10-10000ms between rounds
+#bgwriter_lru_maxpages = 100		# 0-1000 max buffers written/round
+#bgwriter_lru_multiplier = 2.0		# 0-10.0 multipler on buffers scanned/round
+
+
+#------------------------------------------------------------------------------
+# WRITE AHEAD LOG
+#------------------------------------------------------------------------------
+
+# - Settings -
+
+#fsync = on				# turns forced synchronization on or off
+#synchronous_commit = on		# immediate fsync at commit
+#wal_sync_method = fsync		# the default is the first option 
+					# supported by the operating system:
+					#   open_datasync
+					#   fdatasync
+					#   fsync
+					#   fsync_writethrough
+					#   open_sync
+#full_page_writes = on			# recover from partial page writes
+#wal_buffers = 64kB			# min 32kB
+					# (change requires restart)
+#wal_writer_delay = 200ms		# 1-10000 milliseconds
+
+#commit_delay = 0			# range 0-100000, in microseconds
+#commit_siblings = 5			# range 1-1000
+
+# - Checkpoints -
+
+#checkpoint_segments = 3		# in logfile segments, min 1, 16MB each
+#checkpoint_timeout = 5min		# range 30s-1h
+#checkpoint_completion_target = 0.5	# checkpoint target duration, 0.0 - 1.0
+#checkpoint_warning = 30s		# 0 is off
+
+# - Archiving -
+
+#archive_mode = off		# allows archiving to be done
+				# (change requires restart)
+#archive_command = ''		# command to use to archive a logfile segment
+#archive_timeout = 0		# force a logfile segment switch after this
+				# time; 0 is off
+
+
+#------------------------------------------------------------------------------
+# QUERY TUNING
+#------------------------------------------------------------------------------
+
+# - Planner Method Configuration -
+
+#enable_bitmapscan = on
+#enable_hashagg = on
+#enable_hashjoin = on
+#enable_indexscan = on
+#enable_mergejoin = on
+#enable_nestloop = on
+#enable_seqscan = on
+#enable_sort = on
+#enable_tidscan = on
+
+# - Planner Cost Constants -
+
+#seq_page_cost = 1.0			# measured on an arbitrary scale
+#random_page_cost = 4.0			# same scale as above
+#cpu_tuple_cost = 0.01			# same scale as above
+#cpu_index_tuple_cost = 0.005		# same scale as above
+#cpu_operator_cost = 0.0025		# same scale as above
+#effective_cache_size = 128MB
+
+# - Genetic Query Optimizer -
+
+#geqo = on
+#geqo_threshold = 12
+#geqo_effort = 5			# range 1-10
+#geqo_pool_size = 0			# selects default based on effort
+#geqo_generations = 0			# selects default based on effort
+#geqo_selection_bias = 2.0		# range 1.5-2.0
+
+# - Other Planner Options -
+
+#default_statistics_target = 10		# range 1-1000
+#constraint_exclusion = off
+#from_collapse_limit = 8
+#join_collapse_limit = 8		# 1 disables collapsing of explicit 
+					# JOIN clauses
+
+
+#------------------------------------------------------------------------------
+# ERROR REPORTING AND LOGGING
+#------------------------------------------------------------------------------
+
+# - Where to Log -
+
+#log_destination = 'stderr'		# Valid values are combinations of
+					# stderr, csvlog, syslog and eventlog,
+					# depending on platform.  csvlog
+					# requires logging_collector to be on.
+
+# This is used when logging to stderr:
+#logging_collector = off		# Enable capturing of stderr and csvlog
+					# into log files. Required to be on for
+					# csvlogs.
+					# (change requires restart)
+
+# These are only used if logging_collector is on:
+#log_directory = 'pg_log'		# directory where log files are written,
+					# can be absolute or relative to PGDATA
+#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'	# log file name pattern,
+					# can include strftime() escapes
+#log_truncate_on_rotation = off		# If on, an existing log file of the
+					# same name as the new log file will be
+					# truncated rather than appended to.
+					# But such truncation only occurs on
+					# time-driven rotation, not on restarts
+					# or size-driven rotation.  Default is
+					# off, meaning append to existing files
+					# in all cases.
+#log_rotation_age = 1d			# Automatic rotation of logfiles will
+					# happen after that time.  0 to disable.
+#log_rotation_size = 10MB		# Automatic rotation of logfiles will 
+					# happen after that much log output.
+					# 0 to disable.
+
+# These are relevant when logging to syslog:
+#syslog_facility = 'LOCAL0'
+#syslog_ident = 'postgres'
+
+
+# - When to Log -
+
+#client_min_messages = notice		# values in order of decreasing detail:
+					#   debug5
+					#   debug4
+					#   debug3
+					#   debug2
+					#   debug1
+					#   log
+					#   notice
+					#   warning
+					#   error
+
+#log_min_messages = notice		# values in order of decreasing detail:
+					#   debug5
+					#   debug4
+					#   debug3
+					#   debug2
+					#   debug1
+					#   info
+					#   notice
+					#   warning
+					#   error
+					#   log
+					#   fatal
+					#   panic
+
+#log_error_verbosity = default		# terse, default, or verbose messages
+
+#log_min_error_statement = error	# values in order of decreasing detail:
+				 	#   debug5
+					#   debug4
+					#   debug3
+					#   debug2
+					#   debug1
+				 	#   info
+					#   notice
+					#   warning
+					#   error
+					#   log
+					#   fatal
+					#   panic (effectively off)
+
+#log_min_duration_statement = -1	# -1 is disabled, 0 logs all statements
+					# and their durations, > 0 logs only
+					# statements running at least this time.
+
+#silent_mode = off			# DO NOT USE without syslog or
+					# logging_collector
+					# (change requires restart)
+
+# - What to Log -
+
+#debug_print_parse = off
+#debug_print_rewritten = off
+#debug_print_plan = off
+#debug_pretty_print = off
+#log_checkpoints = off
+#log_connections = off
+#log_disconnections = off
+#log_duration = off
+#log_hostname = off
+log_line_prefix = '%t '			# special values:
+					#   %u = user name
+					#   %d = database name
+					#   %r = remote host and port
+					#   %h = remote host
+					#   %p = process ID
+					#   %t = timestamp without milliseconds
+					#   %m = timestamp with milliseconds
+					#   %i = command tag
+					#   %c = session ID
+					#   %l = session line number
+					#   %s = session start timestamp
+					#   %v = virtual transaction ID
+					#   %x = transaction ID (0 if none)
+					#   %q = stop here in non-session
+					#        processes
+					#   %% = '%'
+					# e.g. '<%u%%%d> '
+#log_lock_waits = off			# log lock waits >= deadlock_timeout
+#log_statement = 'none'			# none, ddl, mod, all
+#log_temp_files = -1			# log temporary files equal or larger
+					# than specified size;
+					# -1 disables, 0 logs all temp files
+#log_timezone = unknown			# actually, defaults to TZ environment
+					# setting
+
+
+#------------------------------------------------------------------------------
+# RUNTIME STATISTICS
+#------------------------------------------------------------------------------
+
+# - Query/Index Statistics Collector -
+
+#track_activities = on
+#track_counts = on
+#update_process_title = on
+
+
+# - Statistics Monitoring -
+
+#log_parser_stats = off
+#log_planner_stats = off
+#log_executor_stats = off
+#log_statement_stats = off
+
+
+#------------------------------------------------------------------------------
+# AUTOVACUUM PARAMETERS
+#------------------------------------------------------------------------------
+
+#autovacuum = on			# Enable autovacuum subprocess?  'on' 
+					# requires track_counts to also be on.
+#log_autovacuum_min_duration = -1	# -1 disables, 0 logs all actions and
+					# their durations, > 0 logs only
+					# actions running at least that time.
+#autovacuum_max_workers = 3		# max number of autovacuum subprocesses
+#autovacuum_naptime = 1min		# time between autovacuum runs
+#autovacuum_vacuum_threshold = 50	# min number of row updates before
+					# vacuum
+#autovacuum_analyze_threshold = 50	# min number of row updates before 
+					# analyze
+#autovacuum_vacuum_scale_factor = 0.2	# fraction of table size before vacuum
+#autovacuum_analyze_scale_factor = 0.1	# fraction of table size before analyze
+#autovacuum_freeze_max_age = 200000000	# maximum XID age before forced vacuum
+					# (change requires restart)
+#autovacuum_vacuum_cost_delay = 20	# default vacuum cost delay for
+					# autovacuum, -1 means use
+					# vacuum_cost_delay
+#autovacuum_vacuum_cost_limit = -1	# default vacuum cost limit for
+					# autovacuum, -1 means use
+					# vacuum_cost_limit
+
+
+#------------------------------------------------------------------------------
+# CLIENT CONNECTION DEFAULTS
+#------------------------------------------------------------------------------
+
+# - Statement Behavior -
+
+#search_path = '"$user",public'		# schema names
+#default_tablespace = ''		# a tablespace name, '' uses the default
+#temp_tablespaces = ''			# a list of tablespace names, '' uses
+					# only default tablespace
+#check_function_bodies = on
+#default_transaction_isolation = 'read committed'
+#default_transaction_read_only = off
+#session_replication_role = 'origin'
+#statement_timeout = 0			# 0 is disabled
+#vacuum_freeze_min_age = 100000000
+#xmlbinary = 'base64'
+#xmloption = 'content'
+
+# - Locale and Formatting -
+
+datestyle = 'iso, mdy'
+#timezone = unknown			# actually, defaults to TZ environment
+					# setting
+#timezone_abbreviations = 'Default'     # Select the set of available time zone
+					# abbreviations.  Currently, there are
+					#   Default
+					#   Australia
+					#   India
+					# You can create your own file in
+					# share/timezonesets/.
+#extra_float_digits = 0			# min -15, max 2
+#client_encoding = sql_ascii		# actually, defaults to database
+					# encoding
+
+# These settings are initialized by initdb, but they can be changed.
+#lc_messages = 'en_US.UTF-8'		# locale for system error message
+					# strings
+#lc_monetary = 'en_US.UTF-8'		# locale for monetary formatting
+#lc_numeric = 'en_US.UTF-8'		# locale for number formatting
+#lc_time = 'en_US.UTF-8'		# locale for time formatting
+
+# default configuration for text search
+default_text_search_config = 'pg_catalog.english'
+
+# - Other Defaults -
+
+#explain_pretty_print = on
+#dynamic_library_path = '$libdir'
+#local_preload_libraries = ''
+
+
+#------------------------------------------------------------------------------
+# LOCK MANAGEMENT
+#------------------------------------------------------------------------------
+
+#deadlock_timeout = 1s
+#max_locks_per_transaction = 64		# min 10
+					# (change requires restart)
+# Note:  Each lock table slot uses ~270 bytes of shared memory, and there are
+# max_locks_per_transaction * (max_connections + max_prepared_transactions)
+# lock table slots.
+
+
+#------------------------------------------------------------------------------
+# VERSION/PLATFORM COMPATIBILITY
+#------------------------------------------------------------------------------
+
+# - Previous PostgreSQL Versions -
+
+#add_missing_from = off
+#array_nulls = on
+#backslash_quote = safe_encoding	# on, off, or safe_encoding
+#default_with_oids = off
+#escape_string_warning = on
+#regex_flavor = advanced		# advanced, extended, or basic
+#sql_inheritance = on
+#standard_conforming_strings = off
+#synchronize_seqscans = on
+
+# - Other Platforms and Clients -
+
+#transform_null_equals = off
+
+
+#------------------------------------------------------------------------------
+# CUSTOMIZED OPTIONS
+#------------------------------------------------------------------------------
+
+#custom_variable_classes = ''		# list of custom variable class names

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/redhat.pg_hba.conf.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/redhat.pg_hba.conf.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/redhat.pg_hba.conf.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,74 @@
+# PostgreSQL Client Authentication Configuration File
+# ===================================================
+#
+# Refer to the "Client Authentication" section in the
+# PostgreSQL documentation for a complete description
+# of this file.  A short synopsis follows.
+#
+# This file controls: which hosts are allowed to connect, how clients
+# are authenticated, which PostgreSQL user names they can use, which
+# databases they can access.  Records take one of these forms:
+#
+# local      DATABASE  USER  METHOD  [OPTIONS]
+# host       DATABASE  USER  CIDR-ADDRESS  METHOD  [OPTIONS]
+# hostssl    DATABASE  USER  CIDR-ADDRESS  METHOD  [OPTIONS]
+# hostnossl  DATABASE  USER  CIDR-ADDRESS  METHOD  [OPTIONS]
+#
+# (The uppercase items must be replaced by actual values.)
+#
+# The first field is the connection type: "local" is a Unix-domain socket,
+# "host" is either a plain or SSL-encrypted TCP/IP socket, "hostssl" is an
+# SSL-encrypted TCP/IP socket, and "hostnossl" is a plain TCP/IP socket.
+#
+# DATABASE can be "all", "sameuser", "samerole", a database name, or
+# a comma-separated list thereof.
+#
+# USER can be "all", a user name, a group name prefixed with "+", or
+# a comma-separated list thereof.  In both the DATABASE and USER fields
+# you can also write a file name prefixed with "@" to include names from
+# a separate file.
+#
+# CIDR-ADDRESS specifies the set of hosts the record matches.
+# It is made up of an IP address and a CIDR mask that is an integer
+# (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that specifies
+# the number of significant bits in the mask.  Alternatively, you can write
+# an IP address and netmask in separate columns to specify the set of hosts.
+#
+# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi", "krb5",
+# "ident", "pam", "ldap" or "cert".  Note that "password" sends passwords
+# in clear text; "md5" is preferred since it sends encrypted passwords.
+#
+# OPTIONS are a set of options for the authentication in the format
+# NAME=VALUE. The available options depend on the different authentication
+# methods - refer to the "Client Authentication" section in the documentation
+# for a list of which options are available for which authentication methods.
+#
+# Database and user names containing spaces, commas, quotes and other special
+# characters must be quoted. Quoting one of the keywords "all", "sameuser" or
+# "samerole" makes the name lose its special character, and just match a
+# database or username with that name.
+#
+# This file is read on server startup and when the postmaster receives
+# a SIGHUP signal.  If you edit the file on a running system, you have
+# to SIGHUP the postmaster for the changes to take effect.  You can use
+# "pg_ctl reload" to do that.
+
+# Put your actual configuration here
+# ----------------------------------
+#
+# If you want to allow non-local connections, you need to add more
+# "host" records. In that case you will also need to make PostgreSQL listen
+# on a non-local interface via the listen_addresses configuration parameter,
+# or via the -i or -h command line switches.
+#
+
+
+
+# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
+
+# "local" is for Unix domain socket connections only
+local   all         all                               ident
+# IPv4 local connections:
+host    all         all         127.0.0.1/32          ident
+# IPv6 local connections:
+host    all         all         ::1/128               ident

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/redhat.postgresql.conf.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/redhat.postgresql.conf.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/postgresql/templates/default/redhat.postgresql.conf.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,501 @@
+# -----------------------------
+# PostgreSQL configuration file
+# -----------------------------
+#
+# This file consists of lines of the form:
+#
+#   name = value
+#
+# (The "=" is optional.)  Whitespace may be used.  Comments are introduced with
+# "#" anywhere on a line.  The complete list of parameter names and allowed
+# values can be found in the PostgreSQL documentation.
+#
+# The commented-out settings shown in this file represent the default values.
+# Re-commenting a setting is NOT sufficient to revert it to the default value;
+# you need to reload the server.
+#
+# This file is read on server startup and when the server receives a SIGHUP
+# signal.  If you edit the file on a running system, you have to SIGHUP the
+# server for the changes to take effect, or use "pg_ctl reload".  Some
+# parameters, which are marked below, require a server shutdown and restart to
+# take effect.
+#
+# Any parameter can also be given as a command-line option to the server, e.g.,
+# "postgres -c log_connections=on".  Some parameters can be changed at run time
+# with the "SET" SQL command.
+#
+# Memory units:  kB = kilobytes        Time units:  ms  = milliseconds
+#                MB = megabytes                     s   = seconds
+#                GB = gigabytes                     min = minutes
+#                                                   h   = hours
+#                                                   d   = days
+
+
+#------------------------------------------------------------------------------
+# FILE LOCATIONS
+#------------------------------------------------------------------------------
+
+# The default values of these variables are driven from the -D command-line
+# option or PGDATA environment variable, represented here as ConfigDir.
+
+#data_directory = 'ConfigDir'           # use data in another directory
+                                        # (change requires restart)
+#hba_file = 'ConfigDir/pg_hba.conf'     # host-based authentication file
+                                        # (change requires restart)
+#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file
+                                        # (change requires restart)
+
+# If external_pid_file is not explicitly set, no extra PID file is written.
+#external_pid_file = '(none)'           # write an extra PID file
+                                        # (change requires restart)
+
+
+#------------------------------------------------------------------------------
+# CONNECTIONS AND AUTHENTICATION
+#------------------------------------------------------------------------------
+
+# - Connection Settings -
+
+#listen_addresses = 'localhost'         # what IP address(es) to listen on;
+                                        # comma-separated list of addresses;
+                                        # defaults to 'localhost', '*' = all
+                                        # (change requires restart)
+#port = 5432                            # (change requires restart)
+max_connections = 100                   # (change requires restart)
+# Note:  Increasing max_connections costs ~400 bytes of shared memory per 
+# connection slot, plus lock space (see max_locks_per_transaction).
+#superuser_reserved_connections = 3     # (change requires restart)
+#unix_socket_directory = ''             # (change requires restart)
+#unix_socket_group = ''                 # (change requires restart)
+#unix_socket_permissions = 0777         # begin with 0 to use octal notation
+                                        # (change requires restart)
+#bonjour_name = ''                      # defaults to the computer name
+                                        # (change requires restart)
+
+# - Security and Authentication -
+
+#authentication_timeout = 1min          # 1s-600s
+#ssl = off                              # (change requires restart)
+#ssl_ciphers = 'ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH'      # allowed SSL ciphers
+                                        # (change requires restart)
+#ssl_renegotiation_limit = 512MB        # amount of data between renegotiations
+#password_encryption = on
+#db_user_namespace = off
+
+# Kerberos and GSSAPI
+#krb_server_keyfile = ''
+#krb_srvname = 'postgres'               # (Kerberos only)
+#krb_caseins_users = off
+
+# - TCP Keepalives -
+# see "man 7 tcp" for details
+
+#tcp_keepalives_idle = 0                # TCP_KEEPIDLE, in seconds;
+                                        # 0 selects the system default
+#tcp_keepalives_interval = 0            # TCP_KEEPINTVL, in seconds;
+                                        # 0 selects the system default
+#tcp_keepalives_count = 0               # TCP_KEEPCNT;
+                                        # 0 selects the system default
+
+
+#------------------------------------------------------------------------------
+# RESOURCE USAGE (except WAL)
+#------------------------------------------------------------------------------
+
+# - Memory -
+
+shared_buffers = 32MB                   # min 128kB
+                                        # (change requires restart)
+#temp_buffers = 8MB                     # min 800kB
+#max_prepared_transactions = 0          # zero disables the feature
+                                        # (change requires restart)
+# Note:  Increasing max_prepared_transactions costs ~600 bytes of shared memory
+# per transaction slot, plus lock space (see max_locks_per_transaction).
+# It is not advisable to set max_prepared_transactions nonzero unless you
+# actively intend to use prepared transactions.
+#work_mem = 1MB                         # min 64kB
+#maintenance_work_mem = 16MB            # min 1MB
+#max_stack_depth = 2MB                  # min 100kB
+
+# - Kernel Resource Usage -
+
+#max_files_per_process = 1000           # min 25
+                                        # (change requires restart)
+#shared_preload_libraries = ''          # (change requires restart)
+
+# - Cost-Based Vacuum Delay -
+
+#vacuum_cost_delay = 0ms                # 0-100 milliseconds
+#vacuum_cost_page_hit = 1               # 0-10000 credits
+#vacuum_cost_page_miss = 10             # 0-10000 credits
+#vacuum_cost_page_dirty = 20            # 0-10000 credits
+#vacuum_cost_limit = 200                # 1-10000 credits
+
+# - Background Writer -
+
+#bgwriter_delay = 200ms                 # 10-10000ms between rounds
+#bgwriter_lru_maxpages = 100            # 0-1000 max buffers written/round
+#bgwriter_lru_multiplier = 2.0          # 0-10.0 multipler on buffers scanned/round
+
+# - Asynchronous Behavior -
+
+#effective_io_concurrency = 1           # 1-1000. 0 disables prefetching
+
+
+#------------------------------------------------------------------------------
+# WRITE AHEAD LOG
+#------------------------------------------------------------------------------
+
+# - Settings -
+
+#fsync = on                             # turns forced synchronization on or off
+#synchronous_commit = on                # immediate fsync at commit
+#wal_sync_method = fsync                # the default is the first option 
+                                        # supported by the operating system:
+                                        #   open_datasync
+                                        #   fdatasync
+                                        #   fsync
+                                        #   fsync_writethrough
+                                        #   open_sync
+#full_page_writes = on                  # recover from partial page writes
+#wal_buffers = 64kB                     # min 32kB
+                                        # (change requires restart)
+#wal_writer_delay = 200ms               # 1-10000 milliseconds
+
+#commit_delay = 0                       # range 0-100000, in microseconds
+#commit_siblings = 5                    # range 1-1000
+
+# - Checkpoints -
+
+#checkpoint_segments = 3                # in logfile segments, min 1, 16MB each
+#checkpoint_timeout = 5min              # range 30s-1h
+#checkpoint_completion_target = 0.5     # checkpoint target duration, 0.0 - 1.0
+#checkpoint_warning = 30s               # 0 disables
+
+# - Archiving -
+
+#archive_mode = off             # allows archiving to be done
+                                # (change requires restart)
+#archive_command = ''           # command to use to archive a logfile segment
+#archive_timeout = 0            # force a logfile segment switch after this
+                                # number of seconds; 0 disables
+
+
+#------------------------------------------------------------------------------
+# QUERY TUNING
+#------------------------------------------------------------------------------
+
+# - Planner Method Configuration -
+
+#enable_bitmapscan = on
+#enable_hashagg = on
+#enable_hashjoin = on
+#enable_indexscan = on
+#enable_mergejoin = on
+#enable_nestloop = on
+#enable_seqscan = on
+#enable_sort = on
+#enable_tidscan = on
+
+# - Planner Cost Constants -
+
+#seq_page_cost = 1.0                    # measured on an arbitrary scale
+#random_page_cost = 4.0                 # same scale as above
+#cpu_tuple_cost = 0.01                  # same scale as above
+#cpu_index_tuple_cost = 0.005           # same scale as above
+#cpu_operator_cost = 0.0025             # same scale as above
+#effective_cache_size = 128MB
+
+# - Genetic Query Optimizer -
+
+#geqo = on
+#geqo_threshold = 12
+#geqo_effort = 5                        # range 1-10
+#geqo_pool_size = 0                     # selects default based on effort
+#geqo_generations = 0                   # selects default based on effort
+#geqo_selection_bias = 2.0              # range 1.5-2.0
+
+# - Other Planner Options -
+
+#default_statistics_target = 100        # range 1-10000
+#constraint_exclusion = partition       # on, off, or partition
+#cursor_tuple_fraction = 0.1            # range 0.0-1.0
+#from_collapse_limit = 8
+#join_collapse_limit = 8                # 1 disables collapsing of explicit 
+                                        # JOIN clauses
+
+
+#------------------------------------------------------------------------------
+# ERROR REPORTING AND LOGGING
+#------------------------------------------------------------------------------
+
+# - Where to Log -
+
+#log_destination = 'stderr'             # Valid values are combinations of
+                                        # stderr, csvlog, syslog and eventlog,
+                                        # depending on platform.  csvlog
+                                        # requires logging_collector to be on.
+
+# This is used when logging to stderr:
+logging_collector = on                  # Enable capturing of stderr and csvlog
+                                        # into log files. Required to be on for
+                                        # csvlogs.
+                                        # (change requires restart)
+
+# These are only used if logging_collector is on:
+log_directory = 'pg_log'                # directory where log files are written,
+                                        # can be absolute or relative to PGDATA
+log_filename = 'postgresql-%a.log'      # log file name pattern,
+                                        # can include strftime() escapes
+log_truncate_on_rotation = on           # If on, an existing log file of the
+                                        # same name as the new log file will be
+                                        # truncated rather than appended to.
+                                        # But such truncation only occurs on
+                                        # time-driven rotation, not on restarts
+                                        # or size-driven rotation.  Default is
+                                        # off, meaning append to existing files
+                                        # in all cases.
+log_rotation_age = 1d                   # Automatic rotation of logfiles will
+                                        # happen after that time.  0 disables.
+log_rotation_size = 0                   # Automatic rotation of logfiles will 
+                                        # happen after that much log output.
+                                        # 0 disables.
+
+# These are relevant when logging to syslog:
+#syslog_facility = 'LOCAL0'
+#syslog_ident = 'postgres'
+
+#silent_mode = off                      # Run server silently.
+                                        # DO NOT USE without syslog or
+                                        # logging_collector
+                                        # (change requires restart)
+
+
+# - When to Log -
+
+#client_min_messages = notice           # values in order of decreasing detail:
+                                        #   debug5
+                                        #   debug4
+                                        #   debug3
+                                        #   debug2
+                                        #   debug1
+                                        #   log
+                                        #   notice
+                                        #   warning
+                                        #   error
+
+#log_min_messages = warning             # values in order of decreasing detail:
+                                        #   debug5
+                                        #   debug4
+                                        #   debug3
+                                        #   debug2
+                                        #   debug1
+                                        #   info
+                                        #   notice
+                                        #   warning
+                                        #   error
+                                        #   log
+                                        #   fatal
+                                        #   panic
+
+#log_error_verbosity = default          # terse, default, or verbose messages
+
+#log_min_error_statement = error        # values in order of decreasing detail:
+                                        #   debug5
+                                        #   debug4
+                                        #   debug3
+                                        #   debug2
+                                        #   debug1
+                                        #   info
+                                        #   notice
+                                        #   warning
+                                        #   error
+                                        #   log
+                                        #   fatal
+                                        #   panic (effectively off)
+
+#log_min_duration_statement = -1        # -1 is disabled, 0 logs all statements
+                                        # and their durations, > 0 logs only
+                                        # statements running at least this number
+                                        # of milliseconds
+
+
+# - What to Log -
+
+#debug_print_parse = off
+#debug_print_rewritten = off
+#debug_print_plan = off
+#debug_pretty_print = on
+#log_checkpoints = off
+#log_connections = off
+#log_disconnections = off
+#log_duration = off
+#log_hostname = off
+#log_line_prefix = ''                   # special values:
+                                        #   %u = user name
+                                        #   %d = database name
+                                        #   %r = remote host and port
+                                        #   %h = remote host
+                                        #   %p = process ID
+                                        #   %t = timestamp without milliseconds
+                                        #   %m = timestamp with milliseconds
+                                        #   %i = command tag
+                                        #   %c = session ID
+                                        #   %l = session line number
+                                        #   %s = session start timestamp
+                                        #   %v = virtual transaction ID
+                                        #   %x = transaction ID (0 if none)
+                                        #   %q = stop here in non-session
+                                        #        processes
+                                        #   %% = '%'
+                                        # e.g. '<%u%%%d> '
+#log_lock_waits = off                   # log lock waits >= deadlock_timeout
+#log_statement = 'none'                 # none, ddl, mod, all
+#log_temp_files = -1                    # log temporary files equal or larger
+                                        # than the specified size in kilobytes;
+                                        # -1 disables, 0 logs all temp files
+#log_timezone = unknown                 # actually, defaults to TZ environment
+                                        # setting
+
+
+#------------------------------------------------------------------------------
+# RUNTIME STATISTICS
+#------------------------------------------------------------------------------
+
+# - Query/Index Statistics Collector -
+
+#track_activities = on
+#track_counts = on
+#track_functions = none                 # none, pl, all
+#track_activity_query_size = 1024
+#update_process_title = on
+#stats_temp_directory = 'pg_stat_tmp'
+
+
+# - Statistics Monitoring -
+
+#log_parser_stats = off
+#log_planner_stats = off
+#log_executor_stats = off
+#log_statement_stats = off
+
+
+#------------------------------------------------------------------------------
+# AUTOVACUUM PARAMETERS
+#------------------------------------------------------------------------------
+
+#autovacuum = on                        # Enable autovacuum subprocess?  'on' 
+                                        # requires track_counts to also be on.
+#log_autovacuum_min_duration = -1       # -1 disables, 0 logs all actions and
+                                        # their durations, > 0 logs only
+                                        # actions running at least this number
+                                        # of milliseconds.
+#autovacuum_max_workers = 3             # max number of autovacuum subprocesses
+#autovacuum_naptime = 1min              # time between autovacuum runs
+#autovacuum_vacuum_threshold = 50       # min number of row updates before
+                                        # vacuum
+#autovacuum_analyze_threshold = 50      # min number of row updates before 
+                                        # analyze
+#autovacuum_vacuum_scale_factor = 0.2   # fraction of table size before vacuum
+#autovacuum_analyze_scale_factor = 0.1  # fraction of table size before analyze
+#autovacuum_freeze_max_age = 200000000  # maximum XID age before forced vacuum
+                                        # (change requires restart)
+#autovacuum_vacuum_cost_delay = 20ms    # default vacuum cost delay for
+                                        # autovacuum, in milliseconds;
+                                        # -1 means use vacuum_cost_delay
+#autovacuum_vacuum_cost_limit = -1      # default vacuum cost limit for
+                                        # autovacuum, -1 means use
+                                        # vacuum_cost_limit
+
+
+#------------------------------------------------------------------------------
+# CLIENT CONNECTION DEFAULTS
+#------------------------------------------------------------------------------
+
+# - Statement Behavior -
+
+#search_path = '"$user",public'         # schema names
+#default_tablespace = ''                # a tablespace name, '' uses the default
+#temp_tablespaces = ''                  # a list of tablespace names, '' uses
+                                        # only default tablespace
+#check_function_bodies = on
+#default_transaction_isolation = 'read committed'
+#default_transaction_read_only = off
+#session_replication_role = 'origin'
+#statement_timeout = 0                  # in milliseconds, 0 is disabled
+#vacuum_freeze_min_age = 50000000
+#vacuum_freeze_table_age = 150000000
+#xmlbinary = 'base64'
+#xmloption = 'content'
+
+# - Locale and Formatting -
+
+datestyle = 'iso, mdy'
+#intervalstyle = 'postgres'
+#timezone = unknown                     # actually, defaults to TZ environment
+                                        # setting
+#timezone_abbreviations = 'Default'     # Select the set of available time zone
+                                        # abbreviations.  Currently, there are
+                                        #   Default
+                                        #   Australia
+                                        #   India
+                                        # You can create your own file in
+                                        # share/timezonesets/.
+#extra_float_digits = 0                 # min -15, max 2
+#client_encoding = sql_ascii            # actually, defaults to database
+                                        # encoding
+
+# These settings are initialized by initdb, but they can be changed.
+lc_messages = 'en_US.UTF-8'                     # locale for system error message
+                                        # strings
+lc_monetary = 'en_US.UTF-8'                     # locale for monetary formatting
+lc_numeric = 'en_US.UTF-8'                      # locale for number formatting
+lc_time = 'en_US.UTF-8'                         # locale for time formatting
+
+# default configuration for text search
+default_text_search_config = 'pg_catalog.english'
+
+# - Other Defaults -
+
+#dynamic_library_path = '$libdir'
+#local_preload_libraries = ''
+
+
+#------------------------------------------------------------------------------
+# LOCK MANAGEMENT
+#------------------------------------------------------------------------------
+
+#deadlock_timeout = 1s
+#max_locks_per_transaction = 64         # min 10
+                                        # (change requires restart)
+# Note:  Each lock table slot uses ~270 bytes of shared memory, and there are
+# max_locks_per_transaction * (max_connections + max_prepared_transactions)
+# lock table slots.
+
+
+#------------------------------------------------------------------------------
+# VERSION/PLATFORM COMPATIBILITY
+#------------------------------------------------------------------------------
+
+# - Previous PostgreSQL Versions -
+
+#add_missing_from = off
+#array_nulls = on
+#backslash_quote = safe_encoding        # on, off, or safe_encoding
+#default_with_oids = off
+#escape_string_warning = on
+#regex_flavor = advanced                # advanced, extended, or basic
+#sql_inheritance = on
+#standard_conforming_strings = off
+#synchronize_seqscans = on
+
+# - Other Platforms and Clients -
+
+#transform_null_equals = off
+
+
+#------------------------------------------------------------------------------
+# CUSTOMIZED OPTIONS
+#------------------------------------------------------------------------------
+
+#custom_variable_classes = ''           # list of custom variable class names

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/README.rdoc
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/README.rdoc	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/README.rdoc	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,7 @@
+= DESCRIPTION:
+
+These recipes are used by Globus Provision; they are not meant to be used
+directly.  Please refer to the Globus Provision documentation for instructions 
+on how to deploy and configure a Globus system using these recipes.
+
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/attributes/default.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/attributes/default.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/attributes/default.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,22 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+# Default attributes.
+# For now, only directories where software is going to be installed.
+
+default[:galaxy][:dir] = "/nfs/software/galaxy"
+default[:blast][:dir] = "/nfs/software/blast"
+default[:globus][:simpleCA] = "/var/lib/globus/simple_ca"

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/auto.master
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/auto.master	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/auto.master	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,2 @@
++auto.master
+/nfs              /etc/auto.nfs

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/grid-ca-ssl.conf
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/grid-ca-ssl.conf	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/grid-ca-ssl.conf	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,92 @@
+#
+# SSLeay example configuration file.
+# This is mostly being used for generation of certificate requests.
+#
+
+RANDFILE		= $ENV::HOME/.rnd
+
+####################################################################
+[ ca ]
+default_ca	= CA_default		# The default ca section
+
+####################################################################
+[ CA_default ]
+
+dir		= /var/lib/globus/simple_ca/
+certs		= $dir/certs		# Where the issued certs are kept
+crl_dir		= $dir/crl		# Where the issued crl are kept
+database	= $dir/index.txt	# database index file.
+new_certs_dir	= $dir/newcerts		# default place for new certs.
+
+certificate	= $dir/cacert.pem 	# The CA certificate
+serial		= $dir/serial 		# The current serial number
+crl		= $dir/crl.pem 		# The current CRL
+private_key	= $dir/private/cakey.pem# The private key
+RANDFILE	= $dir/private/.rand	# private random number file
+
+x509_extensions	= x509v3_extensions	# The extentions to add to the cert
+default_days	= 365			# how long to certify for
+default_crl_days= 365 # DEE 30	# how long before next CRL
+default_md	= sha1			# which md to use.
+preserve	= no			# keep passed DN ordering
+
+# A few difference way of specifying how similar the request should look
+# For type CA, the listed attributes must be the same, and the optional
+# and supplied fields are just that :-)
+policy		= policy_match
+
+# For the CA policy
+[ policy_match ]
+countryName		= optional
+stateOrProvinceName	= optional
+organizationName	= match
+organizationalUnitName	= optional
+commonName		= supplied
+emailAddress		= optional
+
+# For the 'anything' policy
+# At this point in time, you must list all acceptable 'object'
+# types.
+[ policy_anything ]
+countryName		= optional
+stateOrProvinceName	= optional
+localityName		= optional
+organizationName	= optional
+organizationalUnitName	= optional
+commonName		= supplied
+emailAddress		= optional
+
+####################################################################
+[ req ]
+default_bits		= 1024
+default_keyfile 	= privkey.pem
+distinguished_name	= req_distinguished_name
+x509_extensions         = v3_ca
+req_extensions          = v3_req
+
+[ req_distinguished_name ]
+# BEGIN CONFIG
+0.organizationName               = Level 0 Organization
+0.organizationName_default       = Grid
+0.organizationalUnitName          = Level 0 Organizational Unit
+0.organizationalUnitName_default = DemoGrid
+commonName                      = Name (e.g., John M. Smith)
+commonName_max                  = 64
+# END CONFIG
+
+[ v3_ca ]
+basicConstraints                = critical,CA:true
+subjectKeyIdentifier            = hash
+nsCertType                      = sslCA,emailCA,objCA
+
+[ v3_req ]
+nsCertType                      = sslCA,emailCA,objCA
+
+[ x509v3_extensions ]
+nsCertType			= objsign,email,server,client
+
+
+
+
+
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/nfs-common
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/nfs-common	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/nfs-common	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,19 @@
+# If you do not set values for the NEED_ options, they will be attempted
+# autodetected; this should be sufficient for most people. Valid alternatives
+# for the NEED_ options are "yes" and "no".
+
+# Do you want to start the statd daemon? It is not needed for NFSv4.
+NEED_STATD=no
+
+# Options for rpc.statd.
+#   Should rpc.statd listen on a specific port? This is especially useful
+#   when you have a port-based firewall. To use a fixed port, set this
+#   this variable to a statd argument like: "--port 4000 --outgoing-port 4001".
+#   For more information, see rpc.statd(8) or http://wiki.debian.org/?SecuringNFS
+STATDOPTS=
+
+# Do you want to start the idmapd daemon? It is only needed for NFSv4.
+NEED_IDMAPD=yes
+
+# Do you want to start the gssd daemon? It is required for Kerberos mounts.
+NEED_GSSD=

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/nfs-kernel-server
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/nfs-kernel-server	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/nfs-kernel-server	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,18 @@
+# Number of servers to start up
+RPCNFSDCOUNT=8
+
+# Runtime priority of server (see nice(1))
+RPCNFSDPRIORITY=0
+
+# Options for rpc.mountd.
+# If you have a port-based firewall, you might want to set up
+# a fixed port here using the --port option. For more information, 
+# see rpc.mountd(8) or http://wiki.debian.org/?SecuringNFS
+RPCMOUNTDOPTS="--manage-gids --port 34000"
+
+# Do you want to start the svcgssd daemon? It is only required for Kerberos
+# exports. Valid alternatives are "yes" and "no"; the default is "no".
+NEED_SVCGSSD=
+
+# Options for rpc.svcgssd.
+RPCSVCGSSDOPTS=

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/nis
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/nis	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/files/default/nis	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,35 @@
+#
+# /etc/defaults/nis	Configuration settings for the NIS daemons.
+#
+
+# Are we a NIS server and if so what kind (values: false, slave, master)?
+NISSERVER=master
+
+# Are we a NIS client?
+NISCLIENT=false
+
+# Location of the master NIS password file (for yppasswdd).
+# If you change this make sure it matches with /var/yp/Makefile.
+YPPWDDIR=/etc
+
+# Do we allow the user to use ypchsh and/or ypchfn ? The YPCHANGEOK
+# fields are passed with -e to yppasswdd, see it's manpage.
+# Possible values: "chsh", "chfn", "chsh,chfn"
+YPCHANGEOK=chsh
+
+# NIS master server.  If this is configured on a slave server then ypinit
+# will be run each time NIS is started.
+NISMASTER=
+
+# Additional options to be given to ypserv when it is started.
+YPSERVARGS=
+
+# Additional options to be given to ypbind when it is started.  
+YPBINDARGS=-no-dbus
+
+# Additional options to be given to yppasswdd when it is started.  Note
+# that if -p is set then the YPPWDDIR above should be empty.
+YPPASSWDDARGS=
+
+# Additional options to be given to ypxfrd when it is started. 
+YPXFRDARGS=

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/metadata.json
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/metadata.json	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/metadata.json	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,39 @@
+{
+  "dependencies": {
+
+  },
+  "platforms": {
+
+  },
+  "long_description": "= DESCRIPTION:\n\n= REQUIREMENTS:\n\n= ATTRIBUTES:\n\n= USAGE:\n\n",
+  "providing": {
+
+  },
+  "maintainer": "YOUR_COMPANY_NAME",
+  "recipes": {
+
+  },
+  "replacing": {
+
+  },
+  "license": "All rights reserved",
+  "maintainer_email": "YOUR_EMAIL",
+  "groupings": {
+
+  },
+  "version": "0.0.1",
+  "recommendations": {
+
+  },
+  "description": "Installs/Configures demogrid",
+  "suggestions": {
+
+  },
+  "name": "demogrid",
+  "attributes": {
+
+  },
+  "conflicting": {
+
+  }
+}
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/metadata.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/metadata.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/metadata.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,6 @@
+maintainer       "YOUR_COMPANY_NAME"
+maintainer_email "YOUR_EMAIL"
+license          "All rights reserved"
+description      "Installs/Configures Globus Provision"
+long_description IO.read(File.join(File.dirname(__FILE__), 'README.rdoc'))
+version          "0.0.1"

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/ca.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/ca.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/ca.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,139 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: CA certificate
+##
+## This recipe installs the CA certificate used to generate the user and
+## host certificates in a Globus Provision instance. If no CA certificate
+## was specified explicitly in the configuration file, then a self-signed
+## certificate will be created on-the-fly by ``gp-start``.
+##
+## The certificate is installed not just as a trusted certificate, but also
+## as a certificate that will be recognized by ``grid-cert-request`` when
+## requesting a certificate.
+##
+## Note that this only installs the certificate, not the private key. To
+## set up a node to act as an actual CA (for example, to use with MyProxy)
+## use the ``simpleca`` recipe.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+require "openssl"
+
+r = cookbook_file "#{node[:scratch_dir]}/gp-ca-cert.pem" do
+  source "ca_cert.pem"
+  mode 0644
+  owner "root"
+  group "root"
+  action :nothing
+end
+
+r.run_action(:create)
+
+node.default[:ca_cert] = OpenSSL::X509::Certificate.new(File.read("#{node[:scratch_dir]}/gp-ca-cert.pem"))
+node.default[:ca_cert_hash] = "%08x" % node.default[:ca_cert].subject.hash
+  
+subject = {}
+node.default[:ca_cert].subject.to_a.each do |name,value,n|
+  subject[name.downcase]=value
+end
+node.default[:ca_cert_subject] = subject
+# Create the grid-security directory
+
+directory "/etc/grid-security" do
+  owner "root"
+  group "root"
+  mode "0755"
+  action :create
+end
+
+directory "/etc/grid-security/certificates" do
+  owner "root"
+  group "root"
+  mode "0755"
+  action :create
+end
+
+
+# Copy the certificate itself.
+# Note that the certificate is generated by demogrid-prepare, and then
+# placed in the cookbook's files directory.
+
+cookbook_file "/etc/grid-security/certificates/#{node.default[:ca_cert_hash]}.0" do
+  source "ca_cert.pem"
+  mode 0644
+  owner "root"
+  group "root"
+end
+
+# Copy a lot of other supporting files.
+
+template "/etc/grid-security/certificates/#{node.default[:ca_cert_hash]}.signing_policy" do
+  source "signing_policy.erb"
+  mode 0644
+  owner "root"
+  group "root"
+  variables(
+    :certificate => node.default[:ca_cert]
+  )    
+end
+
+template "/etc/grid-security/certificates/globus-user-ssl.conf.#{node.default[:ca_cert_hash]}" do
+  source "globus-ssl.conf.erb"
+  mode 0644
+  owner "root"
+  group "root"
+  variables(
+    :certificate => node.default[:ca_cert],
+    :type => :user
+  )  
+end
+
+template "/etc/grid-security/certificates/globus-host-ssl.conf.#{node.default[:ca_cert_hash]}" do
+  source "globus-ssl.conf.erb"
+  mode 0644
+  owner "root"
+  group "root"
+  variables(
+    :certificate => node.default[:ca_cert],
+    :type => :host
+  )  
+end
+
+template "/etc/grid-security/certificates/grid-security.conf.#{node.default[:ca_cert_hash]}" do
+  source "grid-security.conf.erb"
+  mode 0644
+  owner "root"
+  group "root"
+  variables(
+    :subject => node.default[:ca_cert_subject]
+  )    
+end
+
+link "/etc/grid-security/globus-host-ssl.conf" do
+  to "/etc/grid-security/certificates/globus-host-ssl.conf.#{node.default[:ca_cert_hash]}"
+end
+
+link "/etc/grid-security/globus-user-ssl.conf" do
+  to "/etc/grid-security/certificates/globus-user-ssl.conf.#{node.default[:ca_cert_hash]}"
+end
+
+link "/etc/grid-security/grid-security.conf" do
+  to "/etc/grid-security/certificates/grid-security.conf.#{node.default[:ca_cert_hash]}"
+end
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/default.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/default.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/default.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,23 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# RECIPE: Default recipe.
+#
+# This cookbook has no default recipe.
+#
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/domain_users.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/domain_users.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/domain_users.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,154 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: Domain users
+##
+## This recipe creates the users in a domain.
+##
+## This recipe will work both on a node that has the ``nfs_server`` and/or
+## ``nis_server`` recipes on it (in which case global accounts will be
+## created) and on a node that is not an NFS/NIS server (in which case,
+## local accounts will be created).
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+gp_domain = node[:topology][:domains][node[:domain_id]]
+gp_node   = gp_domain[:nodes][node[:node_id]]
+
+# Necessary to create users
+package "libshadow-ruby1.8" do
+  action :install
+end
+
+# Create the "Globus Provision Admins" group.
+# Users in this group have passwordless sudo access
+# on all nodes.
+group "gp-admins" do
+  gid 3000
+end
+
+
+# The :users attribute is part of the generated topology.rb file,
+# and contains information on a domain's users (username,
+# password, etc.)
+users = gp_domain[:users].to_hash
+
+if gp_domain[:nfs_server]
+    homedirs = "/nfs/home"
+else
+    homedirs = "/home"
+end
+
+
+# We start by creating the domain's users.
+users.values.each do |u|
+	# Create the user
+	user u[:id] do
+	  not_if "id #{u[:id]}"
+	  comment u[:description]
+	  gid 100
+	  home "#{homedirs}/#{u[:id]}"
+	  password u[:password_hash]
+	  shell "/bin/bash"
+	  supports :manage_home => true
+	  notifies :run, "execute[rebuild_yp]"
+	end
+
+	auth_keys = "#{homedirs}/#{u[:id]}/.ssh/authorized_keys"
+	key_file = "#{homedirs}/#{u[:id]}/.ssh/id_rsa"
+	pkey_file = key_file+".pub"
+
+  # Create passwordless SSH key
+  execute "ssh-keygen" do
+    not_if do File.exists?(key_file) end
+    user u[:id]
+    command "ssh-keygen -N \"\" -f #{key_file}"
+    action :run
+  end
+		
+  file auth_keys do
+    owner u[:id]
+    mode "0644"
+    action :create
+  end  
+    
+	# Create the authorized_keys file.
+  execute "add_pkey" do
+    only_if do
+        pkey = File.read(pkey_file)
+        File.read(auth_keys).index(pkey).nil?
+    end  
+    user "root"
+    group "root"
+    command "cat #{pkey_file} >> #{auth_keys}"
+    action :run
+  end  
+  
+  execute "add_topology_pkey" do
+    only_if do
+      u[:ssh_pkey] and File.read(auth_keys).index(u[:ssh_pkey]).nil?
+    end  
+    user "root"
+    group "root"
+    command "echo #{u[:ssh_pkey]} >> #{auth_keys}"
+    action :run
+  end    
+  
+  group "gp-admins" do
+    only_if do u[:admin] end
+    members [u[:id]]
+    append true
+    action :modify
+  end
+
+end
+
+# If we specified that this domain's users will use certificates
+# for authentication, then we need to copy the certificate and key
+# into their .globus directory.
+users.values.select{|u| u[:certificate] == "generated"}.each do |u|
+	directory "#{homedirs}/#{u[:id]}/.globus" do
+	  owner u[:id]
+	  group "users"
+	  mode "0755"
+	  action :create
+	end
+
+	cookbook_file "#{homedirs}/#{u[:id]}/.globus/usercert.pem" do
+	  source "#{u[:id]}_cert.pem"
+	  mode 0644
+	  owner u[:id]
+	  group "users"
+	end
+
+	cookbook_file "#{homedirs}/#{u[:id]}/.globus/userkey.pem" do
+	  source "#{u[:id]}_key.pem"
+	  mode 0400
+	  owner u[:id]
+	  group "users"
+	end
+end
+
+# We need to run this for changes to take effect in the NIS server.
+execute "rebuild_yp" do
+ only_if do gp_domain[:nis_server] end
+ user "root"
+ group "root"
+ command "make -C /var/yp"
+ action :nothing
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/ec2.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/ec2.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/ec2.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,42 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: EC2 AMI software pre-install
+##
+## This recipe preinstalls a subset of the software used on a Globus Provision
+## instance to speed up subsequent deployments.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+package "libshadow-ruby1.8"
+package "nis"
+package "portmap"
+package "nfs-common"
+package "autofs"
+package "xinetd"
+package "libssl0.9.8"
+
+include_recipe "globus::client-tools"
+package "globus-simple-ca"
+package "myproxy-server"
+package "globus-gridftp-server-progs"
+package "libglobus-xio-gsi-driver-dev"
+
+include_recipe "condor::condor"
+include_recipe "java"
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/gp_node.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/gp_node.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/gp_node.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,56 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: Globus Provision common actions
+##
+## This recipe performs actions that are common to all Globus Provision nodes.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+gp_domain = node[:topology][:domains][node[:domain_id]]
+gp_node   = gp_domain[:nodes][node[:node_id]]
+
+# Copy the hosts file
+cookbook_file "/etc/hosts" do
+  source "hosts"
+  mode 0644
+  owner "root"
+  group "root"
+end
+
+# Create a BASH profile file with Globus Provision variables
+file "/etc/profile.d/globusprovision" do
+  mode 0644
+  owner "root"
+  group "root"
+  content "export MYPROXY_SERVER=#{gp_domain[:myproxy_server]}"
+end
+
+# Add passwordless access to members of the gp-admins group
+execute "add_sudoers" do
+  line = "%gp-admins ALL=NOPASSWD: ALL"
+  only_if do
+    File.read("/etc/sudoers").index(line).nil?
+  end  
+  user "root"
+  group "root"
+  command "echo \"#{line}\" >> /etc/sudoers"
+  action :run
+end
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/gridmap.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/gridmap.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/gridmap.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,57 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: Gridmap file
+##
+## This recipe creates a gridmap file with the entries specified in the topoloy.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+gp_domain = node[:topology][:domains][node[:domain_id]]
+gp_node   = gp_domain[:nodes][node[:node_id]]
+
+# Create grid-security directory.
+directory "/etc/grid-security" do
+  owner "root"
+  group "root"
+  mode "0755"
+  action :create
+end
+
+# If it does not exist, create an empty gridmap file.
+file "/etc/grid-security/grid-mapfile" do
+  owner "root"
+  group "root"
+  mode "0644"
+  action :create
+end
+
+# Create gridmap
+# Note: Will be regenerated from scratch on subsequent runs of Chef.
+# TODO: Read in existing gridmap, and merge it with provided one (shouldn't be hard
+# to do, but not necessary right now)
+gridmap = gp_domain[:gridmap].to_a
+template "/etc/grid-security/grid-mapfile" do
+  source "gridmap.erb"
+  mode 0644
+  owner "root"
+  group "root"
+  variables(
+    :gridmap => gridmap
+  )
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/hostcert.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/hostcert.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/hostcert.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,49 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: Host certificate
+##
+## Adds a host certificate to the node.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# Create grid-security directory
+directory "/etc/grid-security" do
+  owner "root"
+  group "root"
+  mode "0755"
+  action :create
+end
+
+
+# Copy the certificate and key.
+
+cookbook_file "/etc/grid-security/hostcert.pem" do
+  source "#{node[:node_id]}_cert.pem"
+  mode 0644
+  owner "root"
+  group "root"
+end
+
+cookbook_file "/etc/grid-security/hostkey.pem" do
+  source "#{node[:node_id]}_key.pem"
+  mode 0400
+  owner "root"
+  group "root"
+end
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nfs_client.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nfs_client.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nfs_client.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,133 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: NFS client
+##
+## Set up node so it will have access to its domain's NFS server.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+gp_domain = node[:topology][:domains][node[:domain_id]]
+gp_node   = gp_domain[:nodes][node[:node_id]]
+
+# The nfs_server attribute is part of the generated topology.rb file,
+# and contains the IP of the domain's NFS server.
+server = gp_domain[:nfs_server_ip]
+
+
+# Packages we need
+
+package "nfs-common"
+package "autofs"
+
+# Set configuration options for NFSv4
+cookbook_file "/etc/default/nfs-common" do
+  source "nfs-common"
+  mode 0644
+  owner "root"
+  group "root"
+  notifies :run, "execute[nfs services restart]", :immediately
+end
+
+
+# Set up the home directories so they will be automounted.
+
+if ! File.exists?("/nfs")
+	# Create the directory where the NFS directories will be mounted
+	directory "/nfs" do
+	  owner "root"
+	  group "root"
+	  mode "0755"
+	  action :create
+	  recursive true
+	end
+	
+	# Create the directory where home directories will be mounted
+	directory "/nfs/home" do
+	  owner "root"
+	  group "root"
+	  mode "0755"
+	  action :create
+	  recursive true
+	end
+	
+	# Create the directory where scratch directory will be mounted
+	directory "/nfs/scratch" do
+	  owner "root"
+	  group "root"
+	  mode "0755"
+	  action :create
+	  recursive true
+	end
+	
+	# Create the directory where software directory will be mounted
+	directory "/nfs/software" do
+	  owner "root"
+	  group "root"
+	  mode "0755"
+	  action :create
+	  recursive true
+	end		
+end
+
+
+cookbook_file "/etc/auto.master" do
+  source "auto.master"
+  mode 0644
+  owner "root"
+  group "root"
+end
+
+template "/etc/auto.nfs" do
+  source "auto.nfs.erb"
+  mode 0644
+  owner "root"
+  group "root"
+  variables(
+    :server => server
+  )
+  notifies :restart, "service[autofs]", :immediately  
+end
+
+execute "nfs services restart" do
+  user "root"
+  group "root"
+  action :nothing
+  case node.platform
+    when "debian"
+      command "/etc/init.d/nfs-common restart"
+    when "ubuntu"
+      command "service idmapd --full-restart"
+  end
+end
+
+service "autofs"
+
+# Add /nfs/software/bin to everyone's environment (we do this in /etc/enviroment
+# instead of /etc/profile.d/ (which is BASH-specific) because daemons started by
+# init scripts don't necessarily load BASH environment information.
+# Note that if this file is modified and /nfs/software/bin is removed from the path,
+# subsequent runs of Chef will replace it will a file with just the PATH variable
+file "/etc/environment" do
+  only_if do
+    File.read("/etc/environment").index(/PATH=.*\/nfs\/software\/bin.*/).nil?
+  end
+  owner "root"
+  mode "0644"
+  content "PATH=\"/nfs/software/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games\"\n"
+end  

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nfs_server.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nfs_server.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nfs_server.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,152 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: NFS Server
+##
+## Set up a domain's NFS server and its shared directories.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+gp_domain = node[:topology][:domains][node[:domain_id]]
+gp_node   = gp_domain[:nodes][node[:node_id]]
+
+subnet = nil
+
+# Install the NFS server package
+package "nfs-kernel-server" do
+  action :install
+end
+
+
+# Configuration file with fixed port
+cookbook_file "/etc/default/nfs-kernel-server" do
+  source "nfs-kernel-server"
+  mode 0644
+  owner "root"
+  group "root"
+end
+
+# Set configuration options for NFSv4
+cookbook_file "/etc/default/nfs-common" do
+  source "nfs-common"
+  mode 0644
+  owner "root"
+  group "root"
+end
+
+template "/etc/hosts.allow" do
+  source "hosts.denyallow.erb"
+  mode 0644
+  owner "root"
+  group "root"
+  variables(
+    :subnet => subnet,
+    :type => :allow
+  )
+end
+
+template "/etc/hosts.deny" do
+  source "hosts.denyallow.erb"
+  mode 0644
+  owner "root"
+  group "root"
+  variables(
+    :subnet => subnet,
+    :type => :deny
+  )
+end
+
+# Create directories
+
+# Home directories
+directory "/nfs/home" do
+  owner "root"
+  group "root"
+  mode "0755"
+  recursive true
+  action :create
+end
+
+# Scratch directory
+# This is a kludge: it assumes that ephemeral storage will be mounted
+# on /mnt. If it is not, the recipe should still work since /mnt
+# has to be empty, but keeping the scratch directory there is not ideal. 
+# A more general-purpose solution would be preferable (ideally by
+# specifying these shared directories in the topology)
+directory "/mnt/scratch" do
+  owner "root"
+  group "root"
+  mode 01777
+  recursive true
+  action :create
+end
+
+link "/nfs/scratch" do
+  to "/mnt/scratch"
+end
+
+# Software directories
+directory "/nfs/software" do
+  owner "root"
+  group "root"
+  mode "0755"
+  recursive true
+  action :create
+end
+
+# /nfs/software/bin will be in every user's $PATH
+# For an executable in /nfs/software to be in the user's PATH,
+# the corresponding recipe should create a symbolic link from
+# /nfs/software/bin to the executable
+directory "/nfs/software/bin" do
+  owner "root"
+  group "root"
+  mode "0755"
+  recursive true
+  action :create
+end
+
+# Add exports
+template "/etc/exports" do
+  source "exports.erb"
+  mode 0644
+  owner "root"
+  group "root"
+  variables(
+    :subnet => subnet
+  )
+  notifies :restart, "service[nfs-kernel-server]"
+  notifies :run, "execute[nfs services restart]"
+end
+
+
+# Restart NFS
+service "nfs-kernel-server"
+
+execute "nfs services restart" do
+  user "root"
+  group "root"
+  action :nothing
+  case node.platform
+    when "debian"
+      command "/etc/init.d/nfs-common restart"
+    when "ubuntu"
+      command "service statd --full-restart; service idmapd --full-restart"
+  end
+end

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nis_client.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nis_client.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nis_client.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,88 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: NIS client
+##
+## Set up node so it will have access to its domain's NIS server, allowing
+## domain users to log into it.
+##
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+gp_domain = node[:topology][:domains][node[:domain_id]]
+gp_node   = gp_domain[:nodes][node[:node_id]]
+
+# The nis_server attribute is part of the generated topology.rb file,
+# and contains the IP of the domain's NFS/NIS server.
+server = gp_domain[:nis_server_ip]
+
+
+# Packages we need
+
+package "nis"
+package "portmap"
+
+
+# Modify various configuration files to enable access to the NIS server.
+
+execute "add_passwd_entry" do
+  only_if do
+    File.read("/etc/passwd").index("+::::::").nil?
+  end  
+  user "root"
+  group "root"
+  command "echo +:::::: >> /etc/passwd"
+  action :run
+  notifies :restart, "service[nis]"
+end
+
+execute "add_shadow_entry" do
+  only_if do
+    File.read("/etc/shadow").index("+::::::::").nil?
+  end  
+  user "root"
+  group "root"
+  command "echo +:::::::: >> /etc/shadow"
+  action :run
+  notifies :restart, "service[nis]"
+end
+
+execute "add_group_entry" do
+  only_if do
+    File.read("/etc/group").index("+:::").nil?
+  end  
+  user "root"
+  group "root"
+  command "echo +::: >> /etc/group"
+  action :run
+  notifies :restart, "service[nis]"
+end
+
+file "/etc/yp.conf" do
+  owner "root"
+  mode "0644"
+  content "ypserver #{server}"
+  notifies :restart, "service[nis]", :immediately
+end  
+
+# Restart NIS
+service "nis"
+
+execute "update-rc.d nis defaults" do
+  user "root"
+  group "root"
+end  

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nis_server.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nis_server.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/nis_server.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,104 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: NIS Server
+##
+## Set up an domain's NIS server.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+gp_domain = node[:topology][:domains][node[:domain_id]]
+gp_node   = gp_domain[:nodes][node[:node_id]]
+
+subnet = nil
+
+# Packages we need
+
+package "nis"
+package "portmap"
+
+
+# Only allow access to the nodes in that domain's subnet
+
+template "/etc/hosts.allow" do
+  source "hosts.denyallow.erb"
+  mode 0644
+  owner "root"
+  group "root"
+  variables(
+    :subnet => subnet,
+    :type => :allow
+  )
+end
+
+template "/etc/hosts.deny" do
+  source "hosts.denyallow.erb"
+  mode 0644
+  owner "root"
+  group "root"
+  variables(
+    :subnet => subnet,
+    :type => :deny
+  )
+end
+
+cookbook_file "/etc/default/nis" do
+  source "nis"
+  mode 0644
+  owner "root"
+  group "root"
+  notifies :restart, "service[nis]"
+  notifies :run, "execute[ypinit]"
+end
+
+file "/etc/yp.conf" do
+  owner "root"
+  mode "0644"
+  content "domain grid.example.org server #{gp_node[:hostname]}"
+  notifies :restart, "service[nis]"
+  notifies :run, "execute[ypinit]"
+end  
+
+template "/etc/ypserv.securenets" do
+  source "ypserv.securenets.erb"
+  mode 0644
+  owner "root"
+  group "root"
+  variables(
+    :subnet => subnet
+  )
+  notifies :run, "execute[ypinit]"
+end
+
+
+# Restart services so the changes take effect.
+
+execute "ypinit" do
+ user "root"
+ group "root"
+ command "echo | /usr/lib/yp/ypinit -m"
+ action :nothing
+end
+
+service "nis"
+
+execute "update-rc.d nis defaults" do
+  user "root"
+  group "root"
+end  

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/simpleca.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/simpleca.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/recipes/simpleca.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,133 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                      #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## RECIPE: SimpleCA
+##
+## This recipe installs the CA certificate and key so the node can use SimpleCA
+## commands to sign certificate requests.
+##
+## Note that, instead of using grid-create-ca, we set up all the necessary files 
+## manually. This is necessary since the CA certificate already exists when the
+## recipes are run (it is either created by Globus Provision or provided 
+## explicitly by the user), and we need to install that specific CA.
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+if ! File.exists?(node[:globus][:simpleCA] )
+
+  require "openssl"
+  
+  r = cookbook_file "#{node[:scratch_dir]}/gp-ca-cert.pem" do
+    source "ca_cert.pem"
+    mode 0644
+    owner "root"
+    group "root"
+    action :nothing
+  end
+  
+  r.run_action(:create)
+  
+  node.default[:ca_cert] = OpenSSL::X509::Certificate.new(File.read("#{node[:scratch_dir]}/gp-ca-cert.pem"))
+  node.default[:ca_cert_hash] = "%08x" % node.default[:ca_cert].subject.hash  
+  
+	# Create the basic directory structure
+
+	directory node[:globus][:simpleCA] do
+	  owner "root"
+	  group "root"
+	  mode "0755"
+	  action :create
+	  recursive true
+	end
+
+	directory "#{node[:globus][:simpleCA]}/certs" do
+	  owner "root"
+	  group "root"
+	  mode "0755"
+	  action :create
+	end
+
+	directory "#{node[:globus][:simpleCA]}/crl" do
+	  owner "root"
+	  group "root"
+	  mode "0755"
+	  action :create
+	end
+
+	directory "#{node[:globus][:simpleCA]}/newcerts" do
+	  owner "root"
+	  group "root"
+	  mode "0755"
+	  action :create
+	end
+
+	directory "#{node[:globus][:simpleCA]}/private" do
+	  owner "root"
+	  group "root"
+	  mode "0700"
+	  action :create
+	end
+
+
+	# Copy the CA certificate and key.
+	cookbook_file "#{node[:globus][:simpleCA]}/cacert.pem" do
+	  source "ca_cert.pem"
+	  mode 0644
+	  owner "root"
+	  group "root"
+	end
+
+	cookbook_file "#{node[:globus][:simpleCA]}/private/cakey.pem" do
+	  source "ca_key.pem"
+	  mode 0400
+	  owner "root"
+	  group "root"
+	end
+
+  # Various configuration files needed in the CA directory
+
+	template "#{node[:globus][:simpleCA]}/grid-ca-ssl.conf" do
+    source "globus-ssl.conf.erb"
+    mode 0644
+    owner "root"
+    group "root"
+    variables(
+      :certificate => node.default[:ca_cert],
+      :type => :ca
+    )  
+  end
+
+	file "#{node[:globus][:simpleCA]}/index.txt" do
+	  owner "root"
+	  group "root"
+	  mode "0644"
+	  action :create
+	end
+
+	file "#{node[:globus][:simpleCA]}/serial" do
+	  owner "root"
+	  group "root"
+	  mode "0644"
+	  action :create
+	  content "01\n"
+	end
+
+end
+
+
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/auto.home.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/auto.home.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/auto.home.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1 @@
+*       -fstype=nfs4      <%=@server%>:/nfs/home/&
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/auto.nfs.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/auto.nfs.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/auto.nfs.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,3 @@
+scratch      -fstype=nfs4       <%=@server%>:/mnt/scratch
+software     -fstype=nfs4       <%=@server%>:/nfs/software
+home         -fstype=nfs4       <%=@server%>:/nfs/home

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/exports.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/exports.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/exports.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,9 @@
+<% if @subnet %>
+/nfs/home     <%= @subnet %>/24(rw,root_squash,no_subtree_check,sync)
+/mnt/scratch  <%= @subnet %>/24(rw,root_squash,no_subtree_check,sync)
+/nfs/software <%= @subnet %>/24(rw,root_squash,no_subtree_check,sync)
+<% else %>
+/nfs/home     (rw,root_squash,no_subtree_check,sync)
+/mnt/scratch  (rw,root_squash,no_subtree_check,sync)
+/nfs/software (rw,root_squash,no_subtree_check,sync)
+<% end %>

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/globus-ssl.conf.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/globus-ssl.conf.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/globus-ssl.conf.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,109 @@
+#
+# SSLeay example configuration file.
+# This is mostly being used for generation of certificate requests.
+#
+
+RANDFILE		= $ENV::HOME/.rnd
+
+####################################################################
+[ ca ]
+default_ca	= CA_default		# The default ca section
+
+####################################################################
+[ CA_default ]
+
+dir		= /var/lib/globus/simple_ca		# Where everything is kept
+certs		= $dir/certs		# Where the issued certs are kept
+crl_dir		= $dir/crl		# Where the issued crl are kept
+database	= $dir/index.txt	# database index file.
+new_certs_dir	= $dir/newcerts		# default place for new certs.
+
+certificate	= $dir/cacert.pem 	# The CA certificate
+serial		= $dir/serial 		# The current serial number
+crl		= $dir/crl.pem 		# The current CRL
+private_key	= $dir/private/cakey.pem# The private key
+RANDFILE	= $dir/private/.rand	# private random number file
+
+x509_extensions	= x509v3_extensions	# The extentions to add to the cert
+default_days	= 365			# how long to certify for
+default_crl_days= 365 # DEE 30	# how long before next CRL
+default_md	= sha1			# which md to use.
+preserve	= no			# keep passed DN ordering
+
+# A few difference way of specifying how similar the request should look
+# For type CA, the listed attributes must be the same, and the optional
+# and supplied fields are just that :-)
+policy		= policy_match
+
+# For the CA policy
+[ policy_match ]
+countryName		= optional
+stateOrProvinceName	= optional
+organizationName	= match
+organizationalUnitName	= optional
+commonName		= supplied
+emailAddress		= optional
+
+# For the 'anything' policy
+# At this point in time, you must list all acceptable 'object'
+# types.
+[ policy_anything ]
+countryName		= optional
+stateOrProvinceName	= optional
+localityName		= optional
+organizationName	= optional
+organizationalUnitName	= optional
+commonName		= supplied
+emailAddress		= optional
+
+####################################################################
+[ req ]
+default_bits		= 1024
+default_keyfile 	= privkey.pem
+distinguished_name	= req_distinguished_name
+x509_extensions         = v3_ca
+req_extensions          = v3_req
+
+[ req_distinguished_name ]
+# BEGIN CONFIG
+<% 
+oucount = 0
+ocount = 0
+ at certificate.subject.to_a.each do |name, value, n| 
+	case 
+		when name.match(/^[Cc]$/) %>
+countryName = Country Name (2 letter code)	
+countryName_default = <%= value %> 	
+countryName_min = 2
+countryName_max = 2
+<%		when name.match(/^[Oo]$/) %>
+<%= ocount %>.organizationName = Level <%= ocount %> Organization
+<%= ocount %>.organizationName_default = <%= value %>
+<% ocount += 1 %>
+<%		when name.match(/^[Oo][Uu]$/) %>
+<%= oucount %>.organizationalUnitName = Level <%= oucount %> Organizational Unit
+<%= oucount %>.organizationalUnitName_default = <%= value %>
+<% oucount += 1 %>
+<%		when name.match(/^[Cc][Nn]$/) 
+			if @type == :user %>
+<%= oucount %>.organizationalUnitName = Level <%= oucount %> Organizational Unit
+<%= oucount %>.organizationalUnitName_default = local
+<%			end %>
+commonName = Name (E.g., John M. Smith)
+commonName_max = 64
+<%		else 
+			raise "Unknown subject name component"
+	end 
+end%>
+# END CONFIG
+
+[ v3_ca ]
+basicConstraints                = critical,CA:true
+subjectKeyIdentifier            = hash
+nsCertType                      = sslCA,emailCA,objCA
+
+[ v3_req ]
+nsCertType                      = sslCA,emailCA,objCA
+
+[ x509v3_extensions ]
+nsCertType			= objsign,email,server,client

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/grid-security.conf.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/grid-security.conf.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/grid-security.conf.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,41 @@
+#################################################################
+#
+# File: grid-security.conf
+#
+# Purpose: This file contains the configuration information
+#          for the Grid Security Infrastructure
+#
+#################################################################
+
+# These values are set by grid-ca-create
+SETUP_GSI_HOST_BASE_DN="$SETUP_GSI_HOST_BASE_DN"
+SETUP_GSI_USER_BASE_DN="$SETUP_GSI_USER_BASE_DN"
+SETUP_GSI_CA_NAME="$SETUP_GS_CA_NAME"
+SETUP_GSI_CA_EMAIL_ADDR="$SETUP_GSI_CA_EMAIL_ADDR"
+
+DEFAULT_GSI_HOST_BASE_DN="<%= @subject.select{|k,v| k != "cn"}.collect{|x| x[0]+"="+x[1]}.join ", " %>"
+DEFAULT_GSI_USER_BASE_DN="<%= @subject.select{|k,v| k != "cn"}.collect{|x| x[0]+"="+x[1]}.join ", " %>"
+DEFAULT_GSI_CA_NAME="<%= @subject["cn"] %>"
+DEFAULT_GSI_CA_EMAIL_ADDR="ca at globusprovision.example.org"
+
+# Distinguish Name (DN) of the Host
+GSI_HOST_BASE_DN="${SETUP_GSI_HOST_BASE_DN:-${DEFAULT_GSI_HOST_BASE_DN}}"
+
+# Distinguish Name (DN) of the User
+GSI_USER_BASE_DN="${SETUP_GSI_USER_BASE_DN:-${DEFAULT_GSI_USER_BASE_DN}}"
+
+# CA Name for the organization
+GSI_CA_NAME="${SETUP_GSI_CA_NAME:-${DEFAULT_GSI_CA_NAME}}"
+
+# CA Email address for the organization
+GSI_CA_EMAIL_ADDR="${SETUP_GSI_CA_EMAIL_ADDR:-${DEFAULT_GSI_CA_EMAIL_ADDR}}"
+
+export GSI_HOST_BASE_DN
+export GSI_USER_BASE_DN
+export GSI_CA_NAME
+export GSI_CA_EMAIL_ADDR
+
+
+
+
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/gridmap.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/gridmap.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/gridmap.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,4 @@
+<% @gridmap.each do |g| %>
+"<%= g[:dn] %>" <%= g[:login] %>
+<% end %>
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/hosts.denyallow.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/hosts.denyallow.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/hosts.denyallow.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,11 @@
+<% if @subnet %>
+	<% if @type == :allow %>
+mountd nfsd statd lockd rquotad portmap ypserv ypbind: <%= @subnet %>/24
+	<% elsif @type == :deny %>
+mountd nfsd statd lockd rquotad portmap ypserv ypbind: ALL	
+	<% end %>
+<% else %>
+	<% if @type == :allow %>
+mountd nfsd statd lockd rquotad portmap ypserv ypbind: ALL
+	<% end %>
+<% end %>
\ No newline at end of file

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/signing_policy.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/signing_policy.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/signing_policy.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,5 @@
+access_id_CA      X509         '<%= @certificate.subject.to_s %>'
+
+pos_rights        globus        CA:sign
+
+cond_subjects     globus       '"<%= @certificate.subject.to_s.sub(/CN=.*/, "*") %>"'

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/ypserv.securenets.erb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/ypserv.securenets.erb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/cookbooks/provision/templates/default/ypserv.securenets.erb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,8 @@
+# Always allow access for localhost
+255.0.0.0	127.0.0.0
+
+<% if @subnet %>
+255.255.255.0 <%= @subnet %>
+<% else %>
+0.0.0.0		0.0.0.0
+<% end %>

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/README.md
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/README.md	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/README.md	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,16 @@
+Create roles here, in either the Role Ruby DSL (.rb) or JSON (.json) files. To install roles on the server, use knife.
+
+For example, create `roles/base_example.rb`:
+
+    name "base_example"
+    description "Example base role applied to all nodes."
+    # List of recipes and roles to apply. Requires Chef 0.8, earlier versions use 'recipes()'.
+    #run_list()
+    # Attributes applied if the node doesn't have it set already.
+    #default_attributes()
+    # Attributes applied no matter what the node has set already.
+    #override_attributes()
+
+Then upload it to the Chef Server:
+    
+    knife role from file roles/base_example.rb

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-clusternode-condor.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-clusternode-condor.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-clusternode-condor.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,4 @@
+name "domain-clusternode-condor"
+description "A domain's Condor worker node"
+run_list "recipe[condor::condor_worker]"
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-condor.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-condor.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-condor.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,4 @@
+name "domain-condor"
+description "A domain's Condor head node"
+run_list "recipe[condor::condor_head]"
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-gridftp-default.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-gridftp-default.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-gridftp-default.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,4 @@
+name "domain-gridftp-default"
+description "A domain's GridFTP machine"
+run_list "role[globus]", "recipe[globus::gridftp-default]", "recipe[provision::gridmap]"
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-gridftp-gc.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-gridftp-gc.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-gridftp-gc.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,4 @@
+name "domain-gridftp-gc"
+description "A domain's GridFTP machine (using a Globus Connect certificate)"
+run_list "role[globus]", "recipe[globus::gridftp-gc]", "recipe[provision::gridmap]"
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-myproxy.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-myproxy.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-myproxy.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,4 @@
+name "domain-myproxy"
+description "A domain's MyProxy server"
+run_list "role[globus]", "recipe[provision::simpleca]", "recipe[provision::ca]", "recipe[globus::myproxy]"
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-nfsnis-client.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-nfsnis-client.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-nfsnis-client.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,4 @@
+name "domain-nfsnis-client"
+description "A domain's client machine (any machine that is not the NFS/NIS server)"
+run_list "recipe[provision::gp_node]", "recipe[provision::nis_client]", "recipe[provision::nfs_client]"
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-nfsnis.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-nfsnis.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/domain-nfsnis.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,4 @@
+name "domain-nfsnis"
+description "An domain's NFS/NIS server"
+run_list "recipe[provision::gp_node]", "recipe[provision::nis_server]", "recipe[provision::nfs_server]", "recipe[provision::domain_users]"
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/globus.rb
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/globus.rb	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/chef-files/roles/globus.rb	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,4 @@
+name "globus"
+description "A machine running Globus"
+run_list "recipe[globus::client-tools]", "recipe[provision::ca]", "recipe[provision::hostcert]"
+

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/__init__.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/__init__.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/__init__.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,176 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+from globus.provision.core.topology import Topology, Node
+import tempfile
+from globus.provision.common.threads import SIGINTWatcher
+
+"""
+The CLI: A console frontend to Globus Provision that allows a user to request instances, 
+start them, etc.
+"""
+
+import subprocess
+from optparse import OptionParser, OptionGroup
+import os
+import os.path
+import getpass
+import colorama
+from colorama import Fore, Style
+from globus.provision.common import defaults
+from globus.provision.common import log
+from globus.provision import RELEASE
+
+class Command(object):
+    """Base class for all Globus Provisioning commands"""
+    
+    def __init__(self, argv, root = False, disable_sigintwatch = False):
+        
+        if root:
+            if getpass.getuser() != "root":
+                print "Must run as root"
+                exit(1)
+                
+        self.argv = argv
+        self.optparser = OptionParser(version = RELEASE)
+        self.opt = None
+        self.args = None
+        
+        common_opts = OptionGroup(self.optparser, "Common options", "These options are common to all Globus Provision commands")
+        self.optparser.add_option_group(common_opts)
+        
+        common_opts.add_option("-v", "--verbose", 
+                                  action="store_true", dest="verbose", 
+                                  help = "Produce verbose output.")
+
+        common_opts.add_option("-d", "--debug", 
+                                  action="store_true", dest="debug", 
+                                  help = "Write debugging information. Implies -v.")     
+
+        common_opts.add_option("-i", "--instances-dir", 
+                                  action="store", type="string", dest="dir", 
+                                  default = defaults.INSTANCE_LOCATION,
+                                  help = "Use this directory to store information about the instances "
+                                         "(instead of the default ~/.globusprovision/instances/)")
+        
+        colorama.init(autoreset = True)
+        
+        if not disable_sigintwatch:
+            SIGINTWatcher(self.cleanup_after_kill)
+                
+
+    def parse_options(self):
+        opt, args = self.optparser.parse_args(self.argv)
+
+        self.opt = opt
+        self.args = args
+        
+        if self.opt.debug:
+            loglevel = 2
+        elif self.opt.verbose:
+            loglevel = 1
+        else:
+            loglevel = 0
+            
+        log.init_logging(loglevel)
+        
+    def _run(self, cmd, exit_on_error=True, silent=True):
+        if silent:
+            devnull = open("/dev/null")
+        cmd_list = cmd.split()
+        if silent:
+            retcode = subprocess.call(cmd_list, stdout=devnull, stderr=devnull)
+        else:
+            retcode = subprocess.call(cmd_list)
+        if silent:
+            devnull.close()
+        if retcode != 0 and exit_on_error:
+            print "Error when running %s" % cmd
+            exit(1)        
+        return retcode
+    
+    def _check_exists_file(self, filename):
+        if not os.path.exists(filename):
+            print "File %s does not exist" % filename
+            exit(1)
+            
+    def _print_error(self, what, reason):
+        print colorama.Fore.RED + colorama.Style.BRIGHT + " \033[1;31mERROR\033[0m",
+        print ": %s" % what
+        print colorama.Fore.WHITE + colorama.Style.BRIGHT + "\033[1;37mReason\033[0m",
+        print ": %s" % reason
+        
+    def _colorize_topology_state(self, state):
+        state_str = Topology.state_str[state]
+        reset = Fore.RESET + Style.RESET_ALL
+        if state == Topology.STATE_NEW:
+            return Fore.BLUE + Style.BRIGHT + state_str + reset
+        elif state == Topology.STATE_RUNNING:
+            return Fore.GREEN + Style.BRIGHT + state_str + reset
+        elif state in (Topology.STATE_STARTING, Topology.STATE_CONFIGURING, Topology.STATE_STOPPING, Topology.STATE_RESUMING, Topology.STATE_TERMINATING):
+            return Fore.YELLOW + Style.BRIGHT + state_str + reset
+        elif state in (Topology.STATE_TERMINATED, Topology.STATE_FAILED):
+            return Fore.RED + Style.BRIGHT + state_str + reset
+        elif state == Topology.STATE_STOPPED:
+            return Fore.MAGENTA + Style.BRIGHT + state_str + reset
+        else:
+            return state_str
+
+    def _colorize_node_state(self, state):
+        state_str = Node.state_str[state]
+        reset = Fore.RESET + Style.RESET_ALL
+        if state == Node.STATE_NEW:
+            return Fore.BLUE + Style.BRIGHT + state_str + reset
+        elif state == Node.STATE_RUNNING:
+            return Fore.GREEN + Style.BRIGHT + state_str + reset
+        elif state in (Node.STATE_STARTING, Node.STATE_RUNNING_UNCONFIGURED, Node.STATE_CONFIGURING, Node.STATE_RECONFIGURING, Node.STATE_STOPPING, Node.STATE_STOPPING_CONFIGURING, Node.STATE_STOPPING_CONFIGURED, Node.STATE_RESUMING, Node.STATE_RESUMED_UNCONFIGURED, Node.STATE_RESUMED_RECONFIGURING, Node.STATE_TERMINATING):
+            return Fore.YELLOW + Style.BRIGHT + state_str + reset
+        elif state in (Node.STATE_TERMINATED, Node.STATE_FAILED):
+            return Fore.RED + Style.BRIGHT + state_str + reset
+        elif state == Node.STATE_STOPPED:
+            return Fore.MAGENTA + Style.BRIGHT + state_str + reset
+        else:
+            return state_str
+        
+    def _pad(self, str, colorstr, width):
+        if colorstr == "":
+            return str.ljust(width)
+        else:
+            return colorstr + " " * (width - len(str))        
+        
+    def _set_last_gpi(self, gpi):
+        try:
+            uid = os.getuid()
+            ppid = os.getppid()
+    
+            gpi_dir = "%s/.globusprovision-%i" % (tempfile.gettempdir(), uid)
+            gpi_file = "%s/%i" % (gpi_dir, ppid) 
+            
+            if not os.path.exists(gpi_dir):
+                os.mkdir(gpi_dir, 0700)
+                
+            f = open(gpi_file, "w")
+            f.write(gpi)
+            f.close()
+        except Exception, e:
+            # Saving the last GPI is just for the benefit of auto-completion.
+            # If it doesn't work, worse that will happen is that the user
+            # won't be able to autocomplete the last GPI
+            pass
+        
+    def cleanup_after_kill(self):
+        print "Globus Provision has been unexpectedly killed and may have left resources"
+        print "in an unconfigured state. Use gp-instance-terminate to release resources."
+        
\ No newline at end of file


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/__init__.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/api.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/api.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/api.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,878 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+import json
+
+"""
+Commands that directly invoke the API. Most of these commands are a one-to-one
+mapping to the API, although some some (like gp-instance-add-host) simply provide 
+a more convenient interface on top of instance_update().
+"""
+
+import time
+import sys
+
+from colorama import Fore, Style
+
+import globus.provision.common.defaults as defaults
+
+from globus.provision.cli import Command
+from globus.provision.core.api import API
+from globus.provision.common.utils import parse_extra_files_files
+from globus.provision.common.threads import SIGINTWatcher
+from globus.provision.core.topology import Topology, Node, User
+from globus.provision.core.config import SimpleTopologyConfig
+from globus.provision.common.config import ConfigException
+
+
+def gp_instance_create_func():
+    return gp_instance_create(sys.argv).run()
+        
+class gp_instance_create(Command):
+    """
+    Creates a new Globus Provision instance.
+    """
+    
+    name = "gp-instance-create"
+
+    def __init__(self, argv):
+        Command.__init__(self, argv, disable_sigintwatch=True)
+        
+        self.optparser.add_option("-c", "--conf", 
+                                  action="store", type="string", dest="conf", 
+                                  default = defaults.CONFIG_FILE,
+                                  help = "Configuration file.")
+        
+        self.optparser.add_option("-t", "--topology", 
+                                  action="store", type="string", dest="topology",
+                                  help = "Topology file. Can be either a simple topology file (with extension .conf) "
+                                         "or a topology JSON file (with extension .json).")        
+                
+    def run(self):    
+        self.parse_options()
+
+        if self.opt.conf is None:
+            print "You must specify a configuration file using the -c/--conf option."
+            return 1
+
+        self._check_exists_file(self.opt.conf)
+
+        if self.opt.topology is None:
+            topology_file = self.opt.conf
+        else:
+            self._check_exists_file(self.opt.topology)
+            topology_file = self.opt.topology
+        
+        if topology_file.endswith(".json"):
+            jsonfile = open(topology_file)
+            topology_json = jsonfile.read()
+            jsonfile.close()
+        elif topology_file.endswith(".conf"):
+            try:
+                conf = SimpleTopologyConfig(topology_file)
+                topology = conf.to_topology()
+                topology_json = topology.to_json_string()
+            except ConfigException, cfge:
+                self._print_error("Error in topology configuration file.", cfge)
+                return 1         
+        else:   
+            self._print_error("Unrecognized topology file format.", "File must be either a JSON (.json) or configuration (.conf) file.")
+            return 1         
+
+        configf = open(self.opt.conf)
+        config_txt = configf.read()
+        configf.close()
+
+        api = API(self.opt.dir)
+        (status_code, message, inst_id) = api.instance_create(topology_json, config_txt)
+
+        if status_code != API.STATUS_SUCCESS:
+            self._print_error("Could not create instance.", message)
+            return 1
+        else:
+            print "Created new instance:",
+            print Fore.WHITE + Style.BRIGHT + inst_id
+            self._set_last_gpi(inst_id)
+            return 0
+            
+def gp_instance_describe_func():
+    return gp_instance_describe(sys.argv).run()            
+        
+class gp_instance_describe(Command):
+    """
+    Describes a Globus Provision instance, providing information on the state of the instance,
+    and of the individual hosts (including their hostnames and IPs, if the instance is running). 
+    Running in verbose mode (with the ``-v`` option)
+    will print out the raw JSON representation of the instance's topology.
+    
+    The instance identifier must be specified after all other parameters. For example::
+    
+        gp-instance-describe --verbose gpi-12345678
+        
+    """
+    
+    name = "gp-instance-describe"
+    
+    def __init__(self, argv):
+        Command.__init__(self, argv, disable_sigintwatch=True)
+                
+    def run(self):    
+        self.parse_options()
+        
+        if len(self.args) != 2:
+            print "You must specify an instance id."
+            print "For example: %s [options] gpi-37a8bf17" % self.name
+            return 1
+         
+        inst_id = self.args[1]
+        
+        api = API(self.opt.dir)
+        (status_code, message, topology_json) = api.instance(inst_id)
+        
+        if status_code != API.STATUS_SUCCESS:
+            self._print_error("Could not access instance.", message)
+            return 1 
+        else:
+            self._set_last_gpi(inst_id)
+            
+            if self.opt.verbose or self.opt.debug:
+                print topology_json
+            else:
+                topology = Topology.from_json_string(topology_json)
+                reset = Fore.RESET + Style.RESET_ALL
+                print Fore.WHITE + Style.BRIGHT + inst_id + reset + ": " + self._colorize_topology_state(topology.state)
+                print
+                for domain in topology.domains.values():
+                    print "Domain " + Fore.CYAN + "'%s'" % domain.id
+                    
+                    # Find "column" widths and get values while we're at it
+                    node_width = state_width = hostname_width = ip_width = 0
+                    rows = []
+                    for node in domain.get_nodes():
+                        if len(node.id) > node_width:
+                            node_width = len(node.id)                        
+                        
+                        if node.has_property("state"):
+                            state = node.state
+                        else:
+                            state = Node.STATE_NEW                            
+                        state_str = Node.state_str[state]
+
+                        if len(state_str) > state_width:
+                            state_width = len(state_str)
+
+                        if node.has_property("hostname"):
+                            hostname = node.hostname
+                        else:
+                            hostname = ""                            
+
+                        if len(hostname) > hostname_width:
+                            hostname_width = len(hostname)
+
+                        if node.has_property("ip"):
+                            ip = node.ip
+                        else:
+                            ip = "" 
+
+                        if len(ip) > ip_width:
+                            ip_width = len(ip)    
+                            
+                        rows.append((node.id, state, state_str, hostname, ip))                          
+                                                
+                    for (node_id, state, state_str, hostname, ip) in rows:
+                        node_id_pad = self._pad(node_id, Fore.WHITE + Style.BRIGHT + node_id + Fore.RESET + Style.RESET_ALL, node_width + 2) 
+                        state_pad = self._pad(state_str, self._colorize_node_state(state), state_width + 2) 
+                        hostname_pad   = self._pad(hostname, "", hostname_width + 2)
+                        ip_pad = self._pad(ip, "", ip_width)
+                        print "    " + node_id_pad + state_pad + hostname_pad + ip_pad
+                    print
+            
+            return 0
+                    
+def gp_instance_start_func():
+    return gp_instance_start(sys.argv).run()  
+
+class gp_instance_start(Command):
+    """
+    Starts a Globus Provision instance. If the instance was previous stopped, ``gp-instance-start``
+    will resume it.
+    
+    See :ref:`sec_test_chef` for details on how to use the ``--extra-files`` option.
+    
+    The instance identifier must be specified after all other parameters. For example::
+    
+        gp-instance-start --extra-files foo.txt gpi-12345678
+        
+    """
+        
+    name = "gp-instance-start"
+    
+    def __init__(self, argv, disable_sigintwatch=False):
+        Command.__init__(self, argv, disable_sigintwatch=disable_sigintwatch)
+
+        self.optparser.add_option("-x", "--extra-files", 
+                                  action="store", type="string", dest="extra_files", 
+                                  help = "File with list of files to upload to each host before configuring the instance.")
+
+        self.optparser.add_option("-r", "--run", 
+                                  action="store", type="string", dest="run", 
+                                  help = "File with list of commands to run on each host after configuring the instance.")
+                        
+    def run(self):        
+        t_start = time.time()        
+        self.parse_options()
+        
+        if len(self.args) != 2:
+            print "You must specify an instance id."
+            print "For example: %s [options] gpi-37a8bf17" % self.name
+            return 1
+        
+        inst_id = self.args[1]
+            
+        if self.opt.extra_files != None:
+            self._check_exists_file(self.opt.extra_files)
+            extra_files = parse_extra_files_files(self.opt.extra_files)
+        else:
+            extra_files = []
+
+        if self.opt.run != None:
+            self._check_exists_file(self.opt.run)
+            run_cmds = [l.strip() for l in open(self.opt.run).readlines()]
+        else:
+            run_cmds = []
+
+        print "Starting instance",
+        print Fore.WHITE + Style.BRIGHT + inst_id + Fore.RESET + Style.RESET_ALL + "...",
+        api = API(self.opt.dir)
+        status_code, message = api.instance_start(inst_id, extra_files, run_cmds)
+        
+        if status_code == API.STATUS_SUCCESS:
+            print Fore.GREEN + Style.BRIGHT + "done!"
+
+            self._set_last_gpi(inst_id)
+            
+            t_end = time.time()
+            
+            delta = t_end - t_start
+            minutes = int(delta / 60)
+            seconds = int(delta - (minutes * 60))
+            print "Started instance in " + Fore.WHITE + Style.BRIGHT + "%i minutes and %s seconds" % (minutes, seconds)
+            return 0
+        elif status_code == API.STATUS_FAIL:
+            print
+            self._print_error("Could not start instance.", message)
+            return 1 
+
+def gp_instance_update_func():
+    return gp_instance_update(sys.argv).run()  
+
+class gp_instance_update(Command):
+    """
+    Updates a Globus Provision instance's topology. Globus Provision will determine what changes
+    and necessary (adding/removing hosts, etc.) and will return an error if an invalid update
+    was specified.
+    
+    See :ref:`sec_test_chef` for details on how to use the ``--extra-files`` option.
+    
+    The instance identifier must be specified after all other parameters. For example::
+    
+        gp-instance-update --topology newtopology.json gpi-12345678
+        
+    """
+        
+    name = "gp-instance-update"
+
+    def __init__(self, argv, disable_sigintwatch=False):
+        Command.__init__(self, argv, disable_sigintwatch=disable_sigintwatch)
+
+        self.optparser.add_option("-t", "--topology", 
+                                  action="store", type="string", dest="topology",
+                                  help = "Topology file (JSON format only)")
+
+        self.optparser.add_option("-x", "--extra-files", 
+                                  action="store", type="string", dest="extra_files", 
+                                  help = "File with list of files to upload to each host before configuring the instance.")
+        
+        self.optparser.add_option("-r", "--run", 
+                                  action="store", type="string", dest="run", 
+                                  help = "File with list of commands to run on each host after configuring the instance.")        
+                
+    def run(self):                
+        t_start = time.time()        
+        self.parse_options()
+
+        if len(self.args) != 2:
+            print "You must specify an instance id."
+            print "For example: %s [options] gpi-37a8bf17" % self.name
+            return 1
+        
+        inst_id = self.args[1]
+
+        if self.opt.topology != None:
+            self._check_exists_file(self.opt.topology)
+    
+            jsonfile = open(self.opt.topology)
+            topology_json = jsonfile.read()
+            jsonfile.close()
+        else:
+            topology_json = None
+                
+
+        if self.opt.extra_files != None:
+            self._check_exists_file(self.opt.extra_files)
+            extra_files = parse_extra_files_files(self.opt.extra_files)
+        else:
+            extra_files = []
+            
+        if self.opt.run != None:
+            self._check_exists_file(self.opt.run)
+            run_cmds = [l.strip() for l in open(self.opt.run).readlines()]
+        else:
+            run_cmds = []            
+
+        print "Updating topology of",
+        print Fore.WHITE + Style.BRIGHT + inst_id + Fore.RESET + Style.RESET_ALL + "...",
+
+        api = API(self.opt.dir)
+        status_code, message = api.instance_update(inst_id, topology_json, extra_files, run_cmds)
+        
+        if status_code == API.STATUS_SUCCESS:
+            print Fore.GREEN + Style.BRIGHT + "done!"
+            
+            self._set_last_gpi(inst_id)
+            
+            t_end = time.time()
+            
+            delta = t_end - t_start
+            minutes = int(delta / 60)
+            seconds = int(delta - (minutes * 60))
+            print "Updated topology in " + Fore.WHITE + Style.BRIGHT + "%i minutes and %s seconds" % (minutes, seconds)
+            return 0
+        elif status_code == API.STATUS_FAIL:
+            self._print_error("Could not update topology.", message)
+            return 1
+
+
+def gp_instance_stop_func():
+    return gp_instance_stop(sys.argv).run()         
+        
+class gp_instance_stop(Command):
+    """
+    Stops a running Globus Provision instance. This will shut down all the hosts in the instance,
+    but it will not free the corresponding resources. You can use :ref:`cli_gp-instance-start` to resume
+    the instance at a later time. Use :ref:`cli_gp-instance-terminate` if you want to shut down the hosts
+    *and* free all their resources (including all associated storage) 
+    
+    The instance identifier must be specified after all other parameters. For example::
+    
+        gp-instance-stop --verbose gpi-12345678
+        
+    """
+        
+    name = "gp-instance-stop"
+    
+    def __init__(self, argv, disable_sigintwatch=False):
+        Command.__init__(self, argv, disable_sigintwatch=disable_sigintwatch)
+                
+    def run(self):       
+        self.parse_options()
+        
+        if len(self.args) != 2:
+            print "You must specify an instance id."
+            print "For example: %s [options] gpi-37a8bf17" % self.name
+            return 1
+        
+        inst_id = self.args[1]            
+
+        print "Stopping instance",
+        print Fore.WHITE + Style.BRIGHT + inst_id + Fore.RESET + Style.RESET_ALL + "...",
+        api = API(self.opt.dir)
+        status_code, message = api.instance_stop(inst_id)
+        
+        if status_code == API.STATUS_SUCCESS:
+            print Fore.GREEN + Style.BRIGHT + "done!"
+            self._set_last_gpi(inst_id)
+            return 0
+        elif status_code == API.STATUS_FAIL:
+            self._print_error("Could not stop instance.", message)
+            print
+            return 1 
+
+
+def gp_instance_terminate_func():
+    return gp_instance_terminate(sys.argv).run()     
+
+class gp_instance_terminate(Command):
+    """
+    Terminates a Globus Provision instance. This not only shuts down all the hosts in the
+    instance, but also frees up all associated resources, including storage. Use this command
+    only if you want to irreversibly "kill" your instance. If you only want to stop it temporarily
+    (shutting down the hosts, but allowing them to be resumed at a later time), use 
+    :ref:`cli_gp-instance-stop` instead.
+    
+    This command can also be used on instances that are in the "Failed" state, to free their
+    resources.
+    
+    The instance identifier must be specified after all other parameters. For example::
+    
+        gp-instance-terminate --verbose gpi-12345678
+        
+    """
+    
+    name = "gp-instance-terminate"
+    
+    def __init__(self, argv, disable_sigintwatch=False):
+        Command.__init__(self, argv, disable_sigintwatch=disable_sigintwatch)
+                
+    def run(self):        
+        self.parse_options()
+
+        if len(self.args) != 2:
+            print "You must specify an instance id."
+            print "For example: %s [options] gpi-37a8bf17" % self.name
+            return 1
+                
+        inst_id = self.args[1]
+
+        print "Terminating instance",
+        print Fore.WHITE + Style.BRIGHT + inst_id + Fore.RESET + Style.RESET_ALL + "...",
+        api = API(self.opt.dir)
+        status_code, message = api.instance_terminate(inst_id)
+        
+        if status_code == API.STATUS_SUCCESS:
+            print Fore.GREEN + Style.BRIGHT + "done!"
+            self._set_last_gpi(inst_id)
+            return 0
+        elif status_code == API.STATUS_FAIL:
+            print
+            self._print_error("Could not terminate instance.", message)
+            return 1  
+
+
+def gp_instance_list_func():
+    return gp_instance_list(sys.argv).run()     
+
+class gp_instance_list(Command):
+    """
+    Lists all instances you've created, showing their identifier and their state.
+    
+    If you only want to list certain instances, you can specify a list of instance
+    identifiers after all other parameters. For example::
+    
+        gp-instance-list --verbose gpi-11111111 gpi-22222222 gpi-33333333
+        
+    """
+        
+    name = "gp-instance-list"
+    
+    def __init__(self, argv):
+        Command.__init__(self, argv, disable_sigintwatch=True)
+                
+    def run(self):    
+        self.parse_options()
+        
+        if len(self.args) >= 2:
+            inst_ids = self.args[1:]
+        else:
+            inst_ids = None
+        
+        api = API(self.opt.dir)
+        (status_code, message, topologies_json) = api.instance_list(inst_ids)
+        
+        
+        if status_code != API.STATUS_SUCCESS:
+            self._print_error("Unable to list instances.", message)
+            return 1
+        else:        
+            insts = json.loads(topologies_json)
+            
+            for inst in insts:
+                if self.opt.verbose or self.opt.debug:
+                    print json.dumps(inst, indent=2)
+                else:
+                    topology = Topology.from_json_dict(inst)
+                    
+                    reset = Fore.RESET + Style.RESET_ALL
+                    print Fore.WHITE + Style.BRIGHT + topology.id + reset + ": " + self._colorize_topology_state(topology.state)
+            
+            return 0
+
+def gp_instance_add_user_func():
+    return gp_instance_add_user(sys.argv).run()     
+
+class gp_instance_add_user(Command):
+    """
+    Adds a user to a running instance.
+    
+    The instance identifier must be specified after all other parameters. For example::
+    
+        gp-instance-add-user --domain simple --login johnsmith gpi-12345678
+        
+    """
+        
+    name = "gp-instance-add-user"
+    
+    def __init__(self, argv, disable_sigintwatch=False):
+        Command.__init__(self, argv, disable_sigintwatch=disable_sigintwatch)
+
+        self.optparser.add_option("-m", "--domain", 
+                                  action="store", type="string", dest="domain",
+                                  help = "Domain that the user will be added to.")  
+
+        self.optparser.add_option("-l", "--login", 
+                                  action="store", type="string", dest="login",
+                                  help = "User's UNIX login name")        
+
+        self.optparser.add_option("-p", "--password-hash", 
+                                  action="store", type="string", dest="passwd", 
+                                  default = "!",
+                                  help = "Password hash (default is disabled password)")
+        
+        self.optparser.add_option("-s", "--ssh-pubkey", 
+                                  action="store", type="string", dest="ssh", 
+                                  help = "Public SSH key to be added to the new user's authorized_keys file.")        
+
+        self.optparser.add_option("-a", "--admin", 
+                                  action="store_true", dest="admin", 
+                                  help = "Gives the user sudo privileges.")
+        
+        self.optparser.add_option("-c", "--certificate", 
+                                  action="store", type="string", dest="certificate", 
+                                  default = "generated",                                  
+                                  help = "Type of certificate. Can be \"generated\" or \"none\" (default is " 
+                                         "to generate a certificate for the user)")
+
+                
+    def run(self):    
+        t_start = time.time()        
+        self.parse_options()
+                
+        if len(self.args) != 2:
+            print "You must specify an instance id."
+            print "For example: %s [options] gpi-37a8bf17" % self.name
+            return 1
+          
+        inst_id = self.args[1]
+
+        api = API(self.opt.dir)
+        (status_code, message, topology_json) = api.instance(inst_id)
+        
+        if status_code != API.STATUS_SUCCESS:
+            self._print_error("Could not access instance.", message)
+            return 1 
+        else:
+            t = Topology.from_json_string(topology_json)
+            
+            if not t.domains.has_key(self.opt.domain):
+                self._print_error("Could not add user", "Domain '%s' does not exist" % self.opt.domain)
+                return 1
+            
+            domain = t.domains[self.opt.domain]
+            
+            user = User()
+            user.set_property("id", self.opt.login)
+            user.set_property("password_hash", self.opt.passwd)
+            user.set_property("ssh_pkey", self.opt.ssh)
+            if self.opt.admin != None:
+                user.set_property("admin", self.opt.admin)
+            else:
+                user.set_property("admin", False)
+            user.set_property("certificate", self.opt.certificate)
+
+            domain.add_to_array("users", user)
+            
+            topology_json = t.to_json_string()
+
+            print "Adding new user to",
+            print Fore.WHITE + Style.BRIGHT + inst_id + Fore.RESET + Style.RESET_ALL + "...",
+            status_code, message = api.instance_update(inst_id, topology_json, [], [])
+            
+            if status_code == API.STATUS_SUCCESS:
+                print Fore.GREEN + Style.BRIGHT + "done!"
+
+                self._set_last_gpi(inst_id)
+                
+                t_end = time.time()
+                
+                delta = t_end - t_start
+                minutes = int(delta / 60)
+                seconds = int(delta - (minutes * 60))
+                print "Added user in " + Fore.WHITE + Style.BRIGHT + "%i minutes and %s seconds" % (minutes, seconds)
+                return 0
+            elif status_code == API.STATUS_FAIL:
+                self._print_error("Could not update topology.", message)
+                return 1
+        
+        
+def gp_instance_add_host_func():
+    return gp_instance_add_host(sys.argv).run()     
+        
+class gp_instance_add_host(Command):
+    """
+    Adds a new host to a running instance.
+    
+    The instance identifier must be specified after all other parameters. For example::
+    
+        gp-instance-add-host --domain simple --id simple-gridftp --run-list role[domain-gridftp-default] gpi-12345678
+        
+    """
+        
+    name = "gp-instance-add-host"
+    
+    def __init__(self, argv, disable_sigintwatch=False):
+        Command.__init__(self, argv, disable_sigintwatch=disable_sigintwatch)
+
+        self.optparser.add_option("-m", "--domain", 
+                                  action="store", type="string", dest="domain",
+                                  help = "Domain that the user will be added to.")  
+
+        self.optparser.add_option("-n", "--id", 
+                                  action="store", type="string", dest="id",
+                                  help = "Unique identifier for the new host.")        
+
+        self.optparser.add_option("-p", "--depends", 
+                                  action="store", type="string", dest="depends", 
+                                  default = None,
+                                  help = "ID of the node (if any) that the new host depends on.")
+        
+        self.optparser.add_option("-r", "--run-list", 
+                                  action="store", type="string", dest="runlist", 
+                                  help = "List of Chef recipes or roles to apply to this host.")     
+                
+    def run(self):    
+        t_start = time.time()        
+        self.parse_options()
+                
+        if len(self.args) != 2:
+            print "You must specify an instance id."
+            print "For example: %s [options] gpi-37a8bf17" % self.name
+            return 1
+        
+        inst_id = self.args[1]
+
+        api = API(self.opt.dir)
+        (status_code, message, topology_json) = api.instance(inst_id)
+        
+        if status_code != API.STATUS_SUCCESS:
+            self._print_error("Could not access instance.", message)
+            return 1
+        else:
+            t = Topology.from_json_string(topology_json)
+            
+            if not t.domains.has_key(self.opt.domain):
+                self._print_error("Could not add host", "Domain '%s' does not exist" % self.opt.domain)
+                return 1
+            
+            domain = t.domains[self.opt.domain]
+            
+            node = Node()
+            node.set_property("id", self.opt.id)
+            node.set_property("run_list", self.opt.runlist.split(","))
+            if self.opt.depends != None:
+                node.set_property("depends", "node:%s" % self.opt.depends)
+
+            domain.add_to_array("nodes", (node))
+            
+            topology_json = t.to_json_string()
+
+            print "Adding new host to",
+            print Fore.WHITE + Style.BRIGHT + inst_id + Fore.RESET + Style.RESET_ALL + "...",
+            status_code, message = api.instance_update(inst_id, topology_json, [], [])
+            
+            if status_code == API.STATUS_SUCCESS:
+                print Fore.GREEN + Style.BRIGHT + "done!"
+                
+                self._set_last_gpi(inst_id)
+                
+                t_end = time.time()
+                
+                delta = t_end - t_start
+                minutes = int(delta / 60)
+                seconds = int(delta - (minutes * 60))
+                print "Added host in " + Fore.WHITE + Style.BRIGHT + "%i minutes and %s seconds" % (minutes, seconds)
+                return 0
+            elif status_code == API.STATUS_FAIL:
+                self._print_error("Could not update topology.", message)
+                return 1
+        
+        
+def gp_instance_remove_users_func():
+    return gp_instance_remove_users(sys.argv).run()     
+
+class gp_instance_remove_users(Command):
+    """
+    Removes users from a running instance.
+    
+    The logins of the users to be removed must be specified after the instance identifier which,
+    in turn, must be specified after all other parameters. For example::
+    
+        gp-instance-remove-users --domain simple gpi-12345678 johnsmith sarahjane
+        
+    """
+        
+    name = "gp-instance-remove-users"
+    
+    def __init__(self, argv, disable_sigintwatch=False):
+        Command.__init__(self, argv, disable_sigintwatch=disable_sigintwatch)
+                
+        self.optparser.add_option("-m", "--domain", 
+                                  action="store", type="string", dest="domain",
+                                  help = "Removes users from this domain")  
+                
+    def run(self):    
+        t_start = time.time()        
+        self.parse_options()
+                
+        if len(self.args) <= 2:
+            print "You must specify an instance id and at least one host."
+            print "For example: %s [options] gpi-37a8bf17 simple-wn3" % self.name
+            return 1
+        
+        inst_id = self.args[1]
+        users = self.args[2:]
+        
+        api = API(self.opt.dir)
+        (status_code, message, topology_json) = api.instance(inst_id)
+        
+        if status_code != API.STATUS_SUCCESS:
+            self._print_error("Could not access instance.", message)
+            return 1
+        else:
+            t = Topology.from_json_string(topology_json)
+            
+            if not t.domains.has_key(self.opt.domain):
+                self._print_error("Could not remove users", "Domain '%s' does not exist" % self.opt.domain)
+                return 1
+                            
+            removed = []
+            domain_users = t.domains[self.opt.domain].users
+            
+            for user in users:
+                if user in domain_users:
+                    domain_users.pop(user)
+                    removed.append(user)
+                        
+            remaining = set(removed) ^ set(users)
+            for r in remaining:
+                print Fore.YELLOW + Style.BRIGHT + "Warning" + Fore.RESET + Style.RESET_ALL + ":",
+                print "User %s does not exist." % r
+
+            topology_json = t.to_json_string()
+
+            if len(removed) > 0:
+                print "Removing users %s from" % list(removed),
+                print Fore.WHITE + Style.BRIGHT + inst_id + Fore.RESET + Style.RESET_ALL + "...",
+                status_code, message = api.instance_update(inst_id, topology_json, [], [])
+    
+                if status_code == API.STATUS_SUCCESS:
+                    print Fore.GREEN + Style.BRIGHT + "done!"
+                    
+                    self._set_last_gpi(inst_id)
+                    
+                    t_end = time.time()
+                    
+                    delta = t_end - t_start
+                    minutes = int(delta / 60)
+                    seconds = int(delta - (minutes * 60))
+                    print "Removed users in " + Fore.WHITE + Style.BRIGHT + "%i minutes and %s seconds" % (minutes, seconds)
+                    return 0
+                elif status_code == API.STATUS_FAIL:
+                    self._print_error("Could not update topology.", message)
+                    return 1
+
+              
+def gp_instance_remove_hosts_func():
+    return gp_instance_remove_hosts(sys.argv).run()             
+        
+class gp_instance_remove_hosts(Command):
+    """
+    Removes hosts from a running instance.
+    
+    The host identifiers must be specified after the instance identifier which,
+    in turn, must be specified after all other parameters. For example::
+    
+        gp-instance-remove-hosts --domain simple gpi-12345678 simple-gridftp simple-condor
+        
+    """
+        
+    name = "gp-instance-remove-hosts"
+    
+    def __init__(self, argv, disable_sigintwatch=False):
+        Command.__init__(self, argv, disable_sigintwatch=disable_sigintwatch)
+
+        self.optparser.add_option("-m", "--domain", 
+                                  action="store", type="string", dest="domain",
+                                  help = "Remove hosts from this domain")  
+                
+    def run(self):    
+        t_start = time.time()        
+        self.parse_options()
+                
+        if len(self.args) <= 2:
+            print "You must specify an instance id and at least one host."
+            print "For example: %s [options] gpi-37a8bf17 simple-wn3" % self.name
+            return 1
+        
+        inst_id = self.args[1]
+        hosts = self.args[2:]
+        
+        api = API(self.opt.dir)
+        (status_code, message, topology_json) = api.instance(inst_id)
+        
+        if status_code != API.STATUS_SUCCESS:
+            self._print_error("Could not access instance.", message)
+            return 1 
+        else:
+            t = Topology.from_json_string(topology_json)
+            
+            if not t.domains.has_key(self.opt.domain):
+                self._print_error("Could not remove hosts", "Domain '%s' does not exist" % self.opt.domain)
+                return 1
+                            
+            removed = []
+            nodes = t.domains[self.opt.domain].nodes
+            
+            for host in hosts:
+                if host in nodes:
+                    nodes.pop(host)
+                    removed.append(host)
+                        
+            remaining = set(removed) ^ set(hosts)
+            for r in remaining:
+                print Fore.YELLOW + Style.BRIGHT + "Warning" + Fore.RESET + Style.RESET_ALL + ":",
+                print "Host %s does not exist." % r
+
+            topology_json = t.to_json_string()
+
+            if len(removed) > 0:
+                print "Removing hosts %s from" % list(removed),
+                print Fore.WHITE + Style.BRIGHT + inst_id + Fore.RESET + Style.RESET_ALL + "...",
+                status_code, message = api.instance_update(inst_id, topology_json, [], [])
+    
+                if status_code == API.STATUS_SUCCESS:
+                    print Fore.GREEN + Style.BRIGHT + "done!"
+                    
+                    self._set_last_gpi(inst_id)
+                    
+                    t_end = time.time()
+                    
+                    delta = t_end - t_start
+                    minutes = int(delta / 60)
+                    seconds = int(delta - (minutes * 60))
+                    print "Removed hosts in " + Fore.WHITE + Style.BRIGHT + "%i minutes and %s seconds" % (minutes, seconds)
+                elif status_code == API.STATUS_FAIL:
+                    self._print_error("Could not update topology.", message)
+                    return 1
+                
\ No newline at end of file


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/api.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/ec2.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/ec2.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/ec2.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,114 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+Commands related to the EC2 deployer, but which do not require access to the API
+"""
+
+import sys
+import os.path
+
+from globus.provision.cli import Command
+from globus.provision.deploy.ec2.images import EC2AMICreator, EC2AMIUpdater
+from globus.provision.common import defaults
+from globus.provision.core.config import GPConfig
+from globus.provision.common.utils import parse_extra_files_files
+
+        
+def gp_ec2_create_ami_func():
+    return gp_ec2_create_ami(sys.argv).run()        
+
+class gp_ec2_create_ami(Command):
+    """
+    Creates a Globus Provision AMI with Chef files pre-deployed, and
+    some software pre-installed.            
+    """
+    
+    name = "gp-ec2-create-ami"
+    
+    def __init__(self, argv):
+        Command.__init__(self, argv)
+        
+        self.optparser.add_option("-s", "--chef-directory", 
+                                  action="store", type="string", dest="chef_dir", 
+                                  help = "Location of Chef files.")        
+        
+        self.optparser.add_option("-c", "--conf", 
+                                  action="store", type="string", dest="conf", 
+                                  default = defaults.CONFIG_FILE,
+                                  help = "Configuration file. Must include an [ec2] section.") 
+
+        self.optparser.add_option("-a", "--ami", 
+                                  action="store", type="string", dest="ami", 
+                                  help = "AMI to base the new AMI on.")
+
+        self.optparser.add_option("-n", "--name", 
+                                  action="store", type="string", dest="aminame", 
+                                  help = "Name of AMI to create")
+
+        self.optparser.add_option("-t", "--instance-type", 
+                                  action="store", type="string", dest="instance_type", 
+                                  help = "EC2 instance type to use")
+                
+    def run(self):    
+        self.parse_options()
+
+        config = GPConfig(os.path.expanduser(self.opt.conf))
+        chef_dir = os.path.expanduser(self.opt.chef_dir)
+
+        c = EC2AMICreator(chef_dir, self.opt.ami, self.opt.aminame, self.opt.instance_type, config)
+        c.run()
+        
+        
+def gp_ec2_update_ami_func():
+    return gp_ec2_update_ami(sys.argv).run()     
+        
+class gp_ec2_update_ami(Command):
+    """
+    Takes an existing AMI, adds files to it, and creates a new AMI.
+    """    
+    
+    name = "gp-ec2-update-ami"
+    
+    def __init__(self, argv):
+        Command.__init__(self, argv)
+        
+        self.optparser.add_option("-a", "--ami", 
+                                  action="store", type="string", dest="ami", 
+                                  help = "AMI to update.")
+
+        self.optparser.add_option("-n", "--name", 
+                                  action="store", type="string", dest="aminame", 
+                                  help = "Name of new AMI.")
+
+        self.optparser.add_option("-c", "--conf", 
+                                  action="store", type="string", dest="conf", 
+                                  default = defaults.CONFIG_FILE,
+                                  help = "Configuration file. Must include an [ec2] section.") 
+        
+        self.optparser.add_option("-f", "--files", 
+                                  action="store", type="string", dest="files", 
+                                  help = "Files to add to AMI")
+                
+    def run(self):    
+        self.parse_options()
+        
+        files = parse_extra_files_files(self.opt.files)
+        config = GPConfig(os.path.expanduser(self.opt.conf))
+        
+        c = EC2AMIUpdater(self.opt.ami, self.opt.aminame, files, config)
+        c.run()        
+


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/ec2.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/globusonline.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/globusonline.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/globusonline.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,70 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+"""
+Commands related to Globus Online endpoint management, but which do not require access to the API
+"""
+
+import sys
+import os.path
+import paramiko
+from globus.provision.common.ssh import SSH
+
+from globus.provision.cli import Command
+from globus.provision.core.instance import InstanceStore
+from globus.provision.common.go_transfer import GlobusOnlineHelper
+
+def gp_go_register_endpoints_func():
+    return gp_go_register_endpoints(sys.argv).run()     
+
+class gp_go_register_endpoints(Command):
+    """
+    Creates the Globus Online endpoints specified in an instance's topology.
+    
+    The instance identifier must be specified after all other parameters. For example::
+    
+        gp-go-register-endpoints --public gpi-12345678    
+    """     
+    
+    name = "gp-go-register-endpoints"
+    
+    def __init__(self, argv):
+        Command.__init__(self, argv)    
+
+        self.optparser.add_option("-m", "--domain", 
+                                  action="store", type="string", dest="domain", 
+                                  help = "Register only the endpoints in this domain") 
+
+        self.optparser.add_option("-r", "--replace", 
+                                  action="store_true", dest="replace", 
+                                  help = "If an endpoint already exists, replace it")           
+                
+    def run(self):    
+        self.parse_options()
+        inst_id = self.args[1]
+        
+        istore = InstanceStore(self.opt.dir)
+        inst = istore.get_instance(inst_id)        
+        
+        go_helper = GlobusOnlineHelper.from_instance(inst)
+
+        for domain_name, domain in inst.topology.domains.items():
+            for ep in domain.go_endpoints:
+                go_helper.connect(ep.user)
+                if (not ep.has_property("globus_connect_cert")) or (ep.has_property("globus_connect_cert") and not ep.globus_connect_cert):
+                    go_helper.create_endpoint(ep, self.opt.replace)
+                go_helper.disconnect()
+                        
+                print "Created endpoint '%s#%s' for domain '%s'" % (ep.user, ep.name, domain_name)
\ No newline at end of file


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/cli/globusonline.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/__init__.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/__init__.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/__init__.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,18 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+class GPException(Exception):
+    pass
\ No newline at end of file


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/__init__.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/certs.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/certs.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/certs.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,113 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+Certificate management
+"""
+
+from OpenSSL import crypto
+import os.path
+
+class CertificateGenerator(object):
+    """
+    A class for generating CA, host, and user certificates.
+    """
+    
+    def __init__(self, dn, ca_cert = None, ca_key = None):
+        self.ca_cert = ca_cert
+        self.ca_key = ca_key
+        self.serial = 1
+
+        self.dn = [x.split("=") for x in dn.split(",")]
+        self.dn = dict([(n.upper().strip(), v.strip()) for n,v in self.dn])
+        
+    def set_ca(self, ca_cert, ca_key):
+        self.ca_cert = ca_cert
+        self.ca_key = ca_key
+        
+    def gen_selfsigned_ca_cert(self, cn):
+        return self.__gen_certificate(cn = cn, 
+                                      issuer_cert = None,
+                                      issuer_key = None)
+
+    def gen_user_cert(self, cn):
+        return self.__gen_certificate(cn = cn, 
+                                      issuer_cert = self.ca_cert,
+                                      issuer_key = self.ca_key)
+
+    def gen_host_cert(self, hostname):
+        return self.__gen_certificate(cn = "host/"+hostname, 
+                                      issuer_cert = self.ca_cert,
+                                      issuer_key = self.ca_key)
+        
+    def __gen_certificate(self, cn, issuer_cert, issuer_key):
+        k = crypto.PKey()
+        k.generate_key(crypto.TYPE_RSA, 1024)
+
+        cert = crypto.X509()
+        if self.dn.has_key("C"):
+            cert.get_subject().C = self.dn["C"]
+        if self.dn.has_key("ST"):
+            cert.get_subject().ST = self.dn["ST"]
+        if self.dn.has_key("L"):
+            cert.get_subject().L = self.dn["L"]
+        if self.dn.has_key("O"):
+            cert.get_subject().O = self.dn["O"]
+        if self.dn.has_key("OU"):
+            cert.get_subject().OU = self.dn["OU"]
+        cert.get_subject().CN = cn
+        cert.set_serial_number(self.serial)
+        self.serial += 1
+        cert.set_version(2)
+        cert.gmtime_adj_notBefore(0)
+        cert.gmtime_adj_notAfter(10*365*24*60*60)
+        cert.set_pubkey(k)
+
+        
+        if issuer_cert == None:
+            cert.set_issuer(cert.get_subject())
+        else:
+            cert.set_issuer(issuer_cert.get_subject())
+            
+        if issuer_cert == None:
+            cert.sign(k, 'sha1')
+        else:
+            cert.sign(issuer_key, 'sha1')   
+        
+        return cert, k 
+    
+    # TODO: Return something meaningful depending on whether the
+    # certificate was regenerated or not
+    def save_certificate(self, cert, key, cert_file, key_file, force = False):
+        if not os.path.exists(cert_file) or force:
+            cert_file = open(cert_file, "w")
+            cert_file.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
+            cert_file.close()  
+        
+            key_file = open(key_file, "w")
+            key_file.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, key))
+            key_file.close()        
+        
+    def load_certificate(self, cert_file, key_file):
+        cert_file = open(cert_file, "r")
+        cert = crypto.load_certificate(crypto.FILETYPE_PEM, cert_file.read())
+        cert_file.close()  
+    
+        key_file = open(key_file, "r")
+        key = crypto.load_privatekey(crypto.FILETYPE_PEM, key_file.read())
+        key_file.close()      
+        
+        return cert, key
\ No newline at end of file


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/certs.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/config.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/config.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/config.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,187 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2006-2009, 2011 University of Chicago                            #
+# Copyright 2008-2009, Distributed Systems Architecture Group, Universidad   #
+# Complutense de Madrid (dsa-research.org)                                   #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+A self-documenting, self-validating configuration file parser
+(derived from Python's ConfigParser)
+"""
+
+import ConfigParser
+import textwrap
+import os.path
+        
+OPTTYPE_INT = 0
+OPTTYPE_FLOAT = 1
+OPTTYPE_STRING = 2
+OPTTYPE_BOOLEAN = 3
+OPTTYPE_FILE = 4
+
+class ConfigException(Exception):
+    """A simple exception class used for configuration exceptions"""
+    pass
+
+class Section(object):
+    """
+    A section in the configuration file
+    """
+    
+    def __init__(self, name, required, multiple = None, required_if=None, doc=None):
+        self.name = name
+        self.required = required
+        self.required_if = required_if
+        self.multiple = multiple
+        self.doc = doc
+        self.options = {}
+        
+    def get_doc(self):
+        return textwrap.dedent(self.doc).strip()
+
+
+class Option(object):
+    """
+    An option in a section
+    """
+    
+    def __init__(self, name, getter, type, required, required_if=None, default=None, valid=None, doc=None):
+        self.name = name
+        self.getter = getter
+        self.type = type
+        self.required = required
+        self.required_if = required_if
+        self.default = default
+        self.valid = valid
+        self.doc = doc
+        
+    def get_doc(self):
+        return textwrap.dedent(self.doc).strip()
+
+class Config(object):
+    """
+    A configuration file
+    """
+    
+    def __init__(self, config_file, sections):
+        self.config = ConfigParser.ConfigParser()
+        self.config.readfp(open(config_file, "r"))        
+
+        self.sections = sections
+        self._options = {}
+        
+        self.__load_all()
+        
+    def __load_all(self):
+        multi_sections = [s for s in self.sections if s.multiple != None]
+        required_sections = [s for s in self.sections if s.required]
+        conditional_sections = [s for s in self.sections if not s.required and s.required_if != None]
+        optional_sections = [s for s in self.sections if not s.required and s.required_if == None]
+        
+        sections = multi_sections + required_sections + conditional_sections + optional_sections
+        
+        for sec in sections:
+            if sec.multiple != None:
+                valid = self.config.get(sec.multiple[0],sec.multiple[1]).split()
+                for v in valid:
+                    secname = "%s-%s" % (sec.name, v)
+                    if self.config.has_section(secname):
+                        for opt in sec.options:
+                            self.__load_option(sec, secname, opt, True, multiname = v)                        
+            else:
+                has_section = self.config.has_section(sec.name)
+            
+                # If the section is required, check if it exists
+                if sec.required and not has_section:
+                    raise ConfigException, "Required section [%s] not found" % sec.name
+                
+                # If the section is conditionally required, check that
+                # it meets the conditions
+                if sec.required_if != None:
+                    for req in sec.required_if:
+                        (condsec,condopt) = req[0]
+                        condvalue = req[1]
+                        
+                        if self.config.has_option(condsec,condopt) and self.config.get(condsec,condopt) == condvalue:
+                            if not has_section:
+                                raise ConfigException, "Section '%s' is required when %s.%s==%s" % (sec.name, condsec, condopt, condvalue)
+                        
+                # Load options
+                for opt in sec.options:
+                    self.__load_option(sec, sec.name, opt, has_section)
+
+    
+    def __load_option(self, sec, secname, opt, has_section, multiname = None):
+        # Load a single option
+        optname = opt.name
+        
+        has_option = self.config.has_option(secname, optname)
+        
+        if not has_option:
+            if has_section:
+                if opt.required:
+                    raise ConfigException, "Required option '%s.%s' not found" % (secname, optname)
+                if opt.required_if != None:
+                    for req in opt.required_if:
+                        (condsec,condopt) = req[0]
+                        condvalue = req[1]
+                        
+                        if self.config.has_option(condsec,condopt) and self.config.get(condsec,condopt) == condvalue:
+                            raise ConfigException, "Option '%s.%s' is required when %s.%s==%s" % (secname, optname, condsec, condopt, condvalue)
+            
+            value = opt.default
+            if has_section and opt.type == OPTTYPE_FILE and value != None:
+                value = os.path.expanduser(value)
+                if not os.path.exists(value):
+                    raise ConfigException, "File '%s' does not exist (default for '%s.%s')" % (value, secname, optname)            
+        else:
+            if opt.type == OPTTYPE_INT:
+                value = self.config.getint(secname, optname)
+            elif opt.type == OPTTYPE_FLOAT:
+                value = self.config.getfloat(secname, optname)
+            elif opt.type == OPTTYPE_STRING:
+                value = self.config.get(secname, optname)
+            elif opt.type == OPTTYPE_BOOLEAN:
+                value = self.config.getboolean(secname, optname)
+            elif opt.type == OPTTYPE_FILE:
+                value = os.path.expanduser(self.config.get(secname, optname))
+                if not os.path.exists(value):
+                    raise ConfigException, "File '%s' does not exist (specified for '%s.%s')" % (value, secname, optname)
+                
+            if opt.valid != None:
+                if not value in opt.valid:
+                    raise ConfigException, "Invalid value '%s' specified for '%s.%s'. Valid values are %s" % (value, secname, optname, opt.valid)
+        
+        if sec.multiple != None:
+            self._options[(multiname,opt.getter)] = value
+        else:
+            self._options[opt.getter] = value
+        
+    def get(self, opt):
+        return self._options[opt]
+    
+    def has(self, opt):
+        return self._options.has_key(opt)    
+        
+    @classmethod
+    def from_file(cls, configfile):
+        file = open (configfile, "r")
+        c = ConfigParser.ConfigParser()
+        c.readfp(file)
+        cfg = cls(c)
+        return cfg
+
+        
+        
\ No newline at end of file


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/config.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/defaults.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/defaults.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/defaults.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,24 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+Default file locations
+"""
+
+import os.path
+
+CONFIG_FILE = os.path.expanduser("~/.globusprovision/provision.conf")
+INSTANCE_LOCATION = os.path.expanduser("~/.globusprovision/instances")
\ No newline at end of file


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/defaults.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/go_transfer.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/go_transfer.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/go_transfer.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,317 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+"""
+Helper classes for performing Globus Online operations.
+
+"""
+
+import re
+import StringIO
+import os.path
+import paramiko
+
+from pkg_resources import resource_filename
+
+from globus.provision.common.ssh import SSH
+from globus.provision.common import log
+from globusonline.transfer.api_client import TransferAPIClient, ClientError
+
+
+class GlobusOnlineException(Exception):
+    pass
+    
+class EndpointExistsException(GlobusOnlineException):
+    pass    
+
+class GlobusOnlineHelper(object):
+    
+    def endpoint_create(self, ep, replace):
+            
+        if self.endpoint_exists(ep):
+            if not replace:
+                raise EndpointExistsException, "An endpoint called '%s' already exists. Please choose a different name." % ep.name
+            else:
+                self.endpoint_remove(ep)                
+
+        gridftp_hostname, gridftp_subject, myproxy_hostname, myproxy_subject = self._get_hostnames_subjects(ep)
+            
+        self._endpoint_create(ep.name, gridftp_hostname, gridftp_subject, myproxy_hostname, ep.public)       
+
+    def _get_hostnames_subjects(self, ep):
+        ca_dn = self.inst.config.get("ca-dn")
+        if ca_dn == None:
+            ca_dn = "/O=Grid/OU=Globus Provision (generated)"
+        else:
+            ca_dn = [x.split("=") for x in ca_dn.split(",")]
+            ca_dn = "".join(["/%s=%s" % (n.upper().strip(), v.strip()) for n,v in ca_dn])
+
+        if ep.gridftp.startswith("node:"):
+            gridftp_node = self.inst.topology.get_node_by_id(ep.gridftp[5:])
+            gridftp_hostname = gridftp_node.hostname
+            
+            if ep.has_property("globus_connect_cert") and ep.globus_connect_cert:
+                if ep.has_property("globus_connect_cert_dn"):
+                    gridftp_subject = ep.globus_connect_cert_dn
+                else:
+                    gridftp_subject = None
+            else:
+                gridftp_subject = "%s/CN=host/%s" % (ca_dn, gridftp_hostname)
+        else:
+            # Note: If user specifies an arbitrary GridFTP hostname, it
+            # will only work if it uses a valid host certificate that
+            # is trusted by Globus Online.
+            gridftp_hostname = ep.gridftp
+            gridftp_subject = None
+            
+        if ep.myproxy.startswith("node:"):
+            myproxy_node = self.inst.topology.get_node_by_id(ep.myproxy[5:])
+            myproxy_hostname = myproxy_node.hostname
+            myproxy_subject = "%s/CN=host/%s" % (ca_dn, gridftp_hostname)
+        else:
+            myproxy_hostname = ep.myproxy  
+            myproxy_subject = None
+            
+        return gridftp_hostname, gridftp_subject, myproxy_hostname, myproxy_subject    
+    
+    @staticmethod
+    def from_instance(inst):
+        if inst.config.get("go-cert-file") == None and inst.config.get("go-ssh-key") != None:
+            # Use SSH
+            ssh_key = os.path.expanduser(inst.config.get("go-ssh-key"))
+            return GlobusOnlineCLIHelper(inst, ssh_key)
+        elif inst.config.get("go-cert-file") != None:
+            go_cert_file = os.path.expanduser(inst.config.get("go-cert-file"))
+            go_key_file = os.path.expanduser(inst.config.get("go-key-file"))
+            go_server_ca = resource_filename("globus.provision", "chef-files/cookbooks/globus/files/default/gd-bundle_ca.cert")
+            return GlobusOnlineAPIHelper(inst, go_cert_file, go_key_file, go_server_ca)
+        else:
+            raise GlobusOnlineException, "Must specify either an SSH key or a certificate to connect to GO"
+        
+
+class GlobusOnlineAPIHelper(GlobusOnlineHelper):
+    def __init__(self, inst, go_cert_file, go_key_file, go_server_ca):
+        self.inst = inst
+        self.go_cert_file = go_cert_file
+        self.go_key_file = go_key_file
+        self.go_server_ca = go_server_ca
+        
+    def connect(self, username):
+        self.api = TransferAPIClient(username, self.go_server_ca, self.go_cert_file, self.go_key_file)
+
+    def endpoint_exists(self, ep):
+        try:
+            (code, msg, data) = self.api.endpoint(ep.name)
+
+            if code == 200:
+                return True
+            elif code == 404:
+                return False
+            else:
+                raise GlobusOnlineException, "Unexpected error %i: %s" % (code, msg)            
+        except ClientError as ce:
+            if ce.status_code == 404:
+                return False
+            else:
+                raise GlobusOnlineException, "Unexpected GO API exception: %s" % ce
+
+    def disconnect(self):
+        self.api.close()
+
+    def endpoint_remove(self, ep):
+        try:
+            (code, msg, data) = self.api.endpoint_delete(ep.name)
+            if code >= 400:
+                raise GlobusOnlineException, "Unexpected error %i: %s" % (code, msg)            
+        except ClientError as ce:
+            raise GlobusOnlineException, "Unexpected GO API exception: %s" % ce
+
+    def endpoint_gc_create(self, ep, replace):
+        if self.endpoint_exists(ep):
+            if not replace:
+                raise EndpointExistsException, "An endpoint called '%s' already exists. Please choose a different name." % ep.name
+            else:
+                self.endpoint_remove(ep)
+                   
+        try:
+            (code, msg, data) = self.api.endpoint_create(ep.name, None, description="Globus Provision endpoint",
+                                                         is_globus_connect=True)
+            if code >= 400:
+                raise GlobusOnlineException, "Unexpected error %i: %s" % (code, msg)            
+        except ClientError as ce:
+            raise GlobusOnlineException, "Unexpected GO API exception: %s" % ce                   
+
+        gc_setupkey = data["globus_connect_setup_key"]
+
+        return gc_setupkey
+
+    def endpoint_gc_create_finalize(self, ep):
+        gridftp_hostname, gridftp_subject, myproxy_hostname, myproxy_subject = self._get_hostnames_subjects(ep)
+        
+        # This is a kludge until http://jira.globus.org/browse/KOA-1624 gets fixed
+        username = self.inst.config.get("ec2-username")
+        keyfile = os.path.expanduser(self.inst.config.get("ec2-keyfile"))
+        gc_setupkey = self.inst.topology.get_node_by_id(ep.gridftp[5:]).gc_setupkey
+        ssh = SSH(username, gridftp_hostname, keyfile, default_outf = None, default_errf = None)
+        ssh.open()      
+        outf = StringIO.StringIO()
+        errf = StringIO.StringIO()
+        rc = ssh.run("grid-cert-info -subject -file /etc/grid-security/gc-cert-%s.pem" % (gc_setupkey), outf=outf, errf=errf, exception_on_error=False)
+        if rc != 0:
+            raise GlobusOnlineException, "Could not create endpoint %s" % ep.name
+        ssh.close()
+
+        gridftp_subject = outf.getvalue().strip()     
+              
+        self.endpoint_remove(ep)
+                      
+        self._endpoint_create(ep.name, gridftp_hostname, gridftp_subject, myproxy_hostname, ep.public)
+        
+
+    def _endpoint_create(self, ep_name, gridftp_hostname, gridftp_subject, myproxy_hostname, public):
+        try:
+            (code, msg, data) = self.api.endpoint_create(ep_name, gridftp_hostname, description="Globus Provision endpoint",
+                                                         scheme="gsiftp", port=2811, subject=gridftp_subject,
+                                                         myproxy_server=myproxy_hostname)
+            if code >= 400:
+                raise GlobusOnlineException, "Unexpected error %i: %s" % (code, msg)            
+        except ClientError as ce:
+            raise GlobusOnlineException, "Unexpected GO API exception: %s" % ce
+   
+
+        if public:
+            try:
+                (code, msg, data) = self.api.endpoint(ep_name)
+                if code >= 400:
+                    raise GlobusOnlineException, "Unexpected error %i: %s" % (code, msg)            
+            except ClientError as ce:
+                raise GlobusOnlineException, "Unexpected GO API exception: %s" % ce    
+                  
+            data["public"] = True
+            
+            try:
+                (code, msg, data) = self.api.endpoint_update(ep_name, data)
+                if code >= 400:
+                    raise GlobusOnlineException, "Unexpected error %i: %s" % (code, msg)            
+            except ClientError as ce:
+                raise GlobusOnlineException, "Unexpected GO API exception: %s" % ce          
+
+
+
+class GlobusOnlineCLIHelper(GlobusOnlineHelper):
+    def __init__(self, inst, ssh_key):
+        self.inst = inst
+        self.ssh_key = ssh_key
+        
+    def connect(self, username):
+        self.ssh = SSH(username, "cli.globusonline.org", self.ssh_key, default_outf = None, default_errf = None)
+        try:
+            self.ssh.open(timeout=10)
+        except paramiko.PasswordRequiredException, pre:
+            msg = "The specified SSH key (%s) requires a password." % self.ssh_key
+            msg += "Please specify a passwordless SSH key."
+            raise GlobusOnlineException, msg
+        except Exception, e:
+            raise GlobusOnlineException, "Could not connect to GO CLI. Cause: %s" % e
+        
+    def disconnect(self):
+        self.ssh.close()
+
+    def endpoint_exists(self, ep):
+        rc = self.ssh.run("endpoint-list %s" % (ep.name), exception_on_error=False)
+        return (rc == 0)
+
+    def endpoint_remove(self, ep):
+        rc = self.ssh.run("endpoint-remove %s" % (ep.name), exception_on_error=False)
+        if rc != 0:
+            raise GlobusOnlineException, "Could not remove endpoint %s" % ep.name        
+
+    def endpoint_remove_server(self, ep, server):
+        rc = self.ssh.run("endpoint-remove %s -p %s" % (ep.name, server), exception_on_error=False)
+        if rc != 0:
+            raise GlobusOnlineException, "Could not remove server for endpoint %s" % ep.name
+
+    def endpoint_gc_create(self, ep, replace):
+        if self.endpoint_exists(ep):
+            if not replace:
+                raise EndpointExistsException, "An endpoint called '%s' already exists. Please choose a different name." % ep.name
+            else:
+                self.endpoint_remove(ep)
+                   
+        outf = StringIO.StringIO()
+        errf = StringIO.StringIO()
+        
+        rc = self.ssh.run("endpoint-add %s --gc" % (ep.name), outf=outf, errf=errf, exception_on_error=False)
+        if rc != 0:
+            raise GlobusOnlineException, "Could not create endpoint %s" % ep.name
+        
+        output = outf.getvalue()
+        gc_setupkey = re.findall("[0-9abcdef-]+$", output)[0]
+        
+        return gc_setupkey
+
+    def endpoint_gc_create_finalize(self, ep):
+        gridftp_hostname, gridftp_subject, myproxy_hostname, myproxy_subject = self._get_hostnames_subjects(ep)
+        
+        outf = StringIO.StringIO()
+        errf = StringIO.StringIO()
+        rc = self.ssh.run("endpoint-list -f subjects  %s" % (ep.name), outf=outf, errf=errf, exception_on_error=False)
+        if rc != 0:
+            raise GlobusOnlineException, "Could not create endpoint %s" % ep.name
+
+        gridftp_subject = outf.getvalue().strip()      
+        ep.set_property("globus_connect_cert_dn", gridftp_subject)
+        
+        self.endpoint_remove(ep)
+           
+        self._endpoint_create(ep.name, gridftp_hostname, gridftp_subject, myproxy_hostname, ep.public)
+
+    def endpoint_stop(self, ep):
+        gridftp_hostname, gridftp_subject, myproxy_hostname, myproxy_subject = self._get_hostnames_subjects(ep)
+        
+        self.endpoint_remove_server(ep, gridftp_hostname)        
+        
+        # Create a disconnected endpoint
+        self._endpoint_create(ep.name, "relay-disconnected.globusonline.org", gridftp_subject, "myproxy.globusonline.org", ep.public)
+
+    def endpoint_resume(self, ep):
+        gridftp_hostname, gridftp_subject, myproxy_hostname, myproxy_subject = self._get_hostnames_subjects(ep)
+        
+        # Remove disconnected server
+        self.endpoint_remove_server(ep, "relay-disconnected.globusonline.org") 
+        
+        self._endpoint_create(ep.name, gridftp_hostname, gridftp_subject, myproxy_hostname, ep.public)
+
+    def _endpoint_create(self, ep_name, gridftp_hostname, gridftp_subject, myproxy_hostname, public):   
+        rc = self.ssh.run("endpoint-add %s -p %s -s \"%s\"" % (ep_name, gridftp_hostname, gridftp_subject), exception_on_error=False)
+        if rc != 0:
+            raise GlobusOnlineException, "Could not create endpoint %s" % ep_name
+
+        rc = self.ssh.run("endpoint-modify --myproxy-server=%s %s" % (myproxy_hostname, ep_name), exception_on_error=False)
+        if rc != 0:
+            raise GlobusOnlineException, "Could not set MyProxy server for endpoint %s" % ep_name
+
+        if public:
+            rc = self.ssh.run("endpoint-modify --public %s" % (ep_name), exception_on_error=False)
+            if rc != 0:
+                raise GlobusOnlineException, "Could not make endpoint %s public" % ep_name
+
+
+
+
+
+
+        
+        


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/go_transfer.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/log.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/log.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/log.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,63 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+Convenience functions around the logging module
+"""
+
+import logging
+import os.path
+
+def init_logging(level):
+    if level == 2:
+        level = logging.DEBUG
+    elif level == 1:
+        level = logging.INFO
+    else:
+        level = logging.WARNING
+    logging.getLogger('boto').setLevel(logging.CRITICAL)
+    logging.getLogger('paramiko').setLevel(logging.CRITICAL)
+    
+    l = logging.getLogger("globusprovision")
+    l.setLevel(logging.DEBUG)
+    
+    fh = logging.StreamHandler()
+    fh.setLevel(level)
+    formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s')
+    fh.setFormatter(formatter)
+    l.addHandler(fh)        
+
+def set_logging_instance(instance):
+    l = logging.getLogger("globusprovision")
+    fh = logging.FileHandler(os.path.expanduser('%s/deploy.log' % instance.instance_dir))
+    fh.setLevel(logging.DEBUG)
+    formatter = logging.Formatter('%(asctime)s - %(message)s')
+    fh.setFormatter(formatter)
+    l.addHandler(fh)    
+
+def log(msg, func, node):
+    if node != None:
+        msg = "%s - %s" % (node.id, msg)
+    func(msg)
+
+def debug(msg, node = None):
+    log(msg, logging.getLogger('globusprovision').debug, node)
+
+def warning(msg, node = None):
+    log(msg, logging.getLogger('globusprovision').warning, node)
+    
+def info(msg, node = None):
+    log(msg, logging.getLogger('globusprovision').info, node)


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/log.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/persistence.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/persistence.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/persistence.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,544 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+Persistent objects
+
+A self-documenting, self-validating, persistent object library.
+The only persistent backend currently supported is JSON, but
+others could be added.
+"""
+
+from globus.provision.common.utils import enum
+
+import inspect
+import json
+
+class ObjectValidationException(Exception):
+    """A simple exception class used for validation exceptions"""
+    pass
+
+PropertyTypes = enum("STRING",
+                     "INTEGER",
+                     "NUMBER",
+                     "BOOLEAN",
+                     "OBJECT",
+                     "ARRAY",
+                     "NULL",
+                     "ANY")
+
+def pt_to_str(pt, items_type = None):
+    if pt == PropertyTypes.STRING:
+        return "string"
+    elif pt == PropertyTypes.INTEGER:
+        return "integer"
+    elif pt == PropertyTypes.NUMBER:
+        return "number"
+    elif pt == PropertyTypes.BOOLEAN:
+        return "boolean"
+    elif pt == PropertyTypes.OBJECT:
+        return "object"
+    elif pt == PropertyTypes.ARRAY:
+        return "list of %s" % pt_to_str(items_type)
+    elif pt == PropertyTypes.NULL:
+        return "null"
+    elif pt == PropertyTypes.ANY:
+        return "any"
+    elif inspect.isclass(pt) and issubclass(pt, PersistentObject):
+        return pt.__name__
+    else:
+        return "unknown"
+
+def validate_property_type(value, expected_type, items_type = None, json = False):
+    if expected_type == PropertyTypes.STRING:
+        valid = isinstance(value, basestring)
+    elif expected_type == PropertyTypes.INTEGER:
+        valid = isinstance(value, int)
+    elif expected_type == PropertyTypes.NUMBER:
+        valid = isinstance(value, int) or isinstance(value, float)
+    elif expected_type == PropertyTypes.BOOLEAN:
+        valid = isinstance(value, bool)
+    elif expected_type == PropertyTypes.OBJECT:
+        valid = isinstance(value, dict)
+    elif expected_type == PropertyTypes.ARRAY:
+        if isinstance(value, list):
+            valid = True
+            for elem in value:
+                valid &= validate_property_type(elem, items_type, json = json)
+        elif isinstance(value, dict):
+            valid = True
+            for elem in value.values():
+                valid &= validate_property_type(elem, items_type, json = json)
+        else:
+            valid = False    
+    elif expected_type == PropertyTypes.NULL:
+        valid = value is None
+    elif expected_type == PropertyTypes.ANY:
+        valid = True
+    elif issubclass(expected_type, PersistentObject):
+        # Further validation is done when we convert
+        # this object
+        if json:
+            valid = isinstance(value, dict)
+        else:
+            valid = isinstance(value, expected_type)
+    else:
+        valid = False    
+    
+    return valid
+
+class Property(object):    
+    def __init__(self, name, proptype, required, description, editable = False, items = None, items_unique = False):
+        self.name = name
+        self.type = proptype
+        self.required = required
+        self.editable = editable
+        self.items_unique = items_unique
+        self.description = description
+        self.items = items
+        
+        
+class PropertyChange(object):
+    ADD = 0
+    REMOVE = 1
+    EDIT = 2    
+    
+    def __init__(self, change_type):
+        self.change_type = change_type
+
+
+class PrimitivePropertyChange(PropertyChange):
+
+    def __init__(self, change_type, old_value, new_value):
+        PropertyChange.__init__(self, change_type)
+        self.old_value = old_value
+        self.new_value = new_value
+        
+    def to_dict(self):
+        if self.change_type == PropertyChange.ADD:
+            return {"__action__": "add"}
+        elif self.change_type == PropertyChange.REMOVE:
+            return {"__action__": "remove"}
+        elif self.change_type == PropertyChange.EDIT:
+            d = {}        
+            d["old"] = self.old_value
+            d["new"] = self.new_value
+            return d
+        
+        
+class ArrayPropertyChange(PropertyChange):
+    
+    def __init__(self, change_type, add, remove, edit):
+        PropertyChange.__init__(self, change_type)
+        self.add = add
+        self.remove = remove
+        self.edit = edit
+        
+    def to_dict(self):
+        if self.change_type == PropertyChange.ADD:
+            return {"__action__": "add"}
+        elif self.change_type == PropertyChange.REMOVE:
+            return {"__action__": "remove"}
+        elif self.change_type == PropertyChange.EDIT:
+            d = {}
+        
+            if len(self.add) > 0:
+                d["ADD"] = self.add
+                
+            if len(self.remove) > 0:
+                d["REMOVE"] = self.remove
+            
+            if len(self.edit) > 0:
+                editd = {}
+                for property in self.edit:
+                    editd[property] = self.edit[property].to_dict()
+                d["EDIT"] = editd
+                
+            return d
+        
+        
+class ObjectPropertyChange(PropertyChange):
+    
+    def __init__(self, change_type, changes):
+        PropertyChange.__init__(self, change_type)
+        self.changes = changes
+        
+    def to_dict(self):
+        if self.change_type == PropertyChange.ADD:
+            return {"__action__": "add"}
+        elif self.change_type == PropertyChange.REMOVE:
+            return {"__action__": "remove"}
+        elif self.change_type == PropertyChange.EDIT:
+            d = {}
+            for property in self.changes:
+                d[property] = self.changes[property].to_dict()
+            return d
+        
+
+class PersistentObject(object):
+    def __init__(self):
+        self._json_file = None
+
+    def save(self, filename = None):
+        if self._json_file == None and filename == None:
+            raise Exception("Don't know where to save this topology")
+        if filename != None:
+            self._json_file = filename
+        f = open (self._json_file, "w")
+        json_string = self.to_json_string()
+        f.write(json_string)
+        f.close()
+        
+    def set_property(self, p_name, p_value):
+        # TODO: Validation
+        setattr(self, p_name, p_value)
+        
+    def has_property(self, p_name):
+        return hasattr(self, p_name)       
+    
+    def get_property(self, p_name):
+        # TODO: Validation
+        return getattr(self, p_name)        
+    
+    def add_to_array(self, p_name, item_value):
+        if not self.properties.has_key(p_name):
+            raise ObjectValidationException("%s does not have a %s property" % (type(self).__name__, p_name))
+        
+        p = self.properties[p_name]
+        
+        if p.type != PropertyTypes.ARRAY:
+            raise ObjectValidationException("Tried to add %s to %s.%s, but it is not an array." % (item_value, type(self).__name__, p_name))
+        
+        if not validate_property_type(item_value, p.items):
+            raise ObjectValidationException("Tried to add %s to %s.%s, but this array contains %s." % (item_value, type(self).__name__, p_name, pt_to_str(p.items)))
+        
+        if p.items_unique and inspect.isclass(p.items) and issubclass(p.items, PersistentObject):
+            if not self.has_property(p_name):
+                p_value = {}
+                self.set_property(p_name, p_value)
+            else:
+                p_value = self.get_property(p_name)
+                
+            setattr(item_value, "parent_%s" % type(self).__name__, self)
+            p_value[item_value.id] = item_value
+        else:
+            if not self.has_property(p_name):
+                p_value = []
+                self.set_property(p_name, p_value)
+            else:
+                p_value = self.get_property(p_name)
+                
+            p_value.append(item_value)
+            
+    
+    def validate_update(self, pobj):
+        if type(self) != type(pobj):
+            raise ObjectValidationException("Cannot update a %s object with a %s object" % (type(self).__name__, type(pobj).__name__))
+        
+        changes = {}
+        for name, property in self.properties.items():
+            self_hasattr = hasattr(self, name)
+            pobj_hasattr = hasattr(pobj, name)
+            
+            if self_hasattr:
+                self_value = getattr(self, name)
+
+            if pobj_hasattr:
+                pobj_value = getattr(pobj, name)
+            
+            if property.type in (PropertyTypes.STRING, PropertyTypes.INTEGER, PropertyTypes.NUMBER, PropertyTypes.BOOLEAN, PropertyTypes.NULL):
+                if not self_hasattr and pobj_hasattr:
+                    if not property.editable:
+                        raise ObjectValidationException("Tried to add a property, but it is non-editable (setting '%s' to %s)""" % (name, pobj_value))
+                    else:
+                        changes[name] = PrimitivePropertyChange(PropertyChange.ADD, None, pobj_value)
+                elif self_hasattr and not pobj_hasattr:
+                    if not property.editable:
+                        raise ObjectValidationException("Tried to remove a property, but it is non-editable (removing '%s' = %s)""" % (name, self_value))
+                    else:
+                        changes[name] = PrimitivePropertyChange(PropertyChange.REMOVE, self_value, None)
+                elif self_hasattr and pobj_hasattr:
+                    # If this is a primitive type, check if the value has changed and, if so,
+                    # whether the change is allowed.
+                    if self_value != pobj_value:
+                        if not property.editable:
+                            raise ObjectValidationException("Tried to change the value of non-editable property '%s' (from %s to %s)""" % (name, self_value, pobj_value))
+                        else:
+                            changes[name] = PrimitivePropertyChange(PropertyChange.EDIT, self_value, pobj_value)
+            elif property.type == PropertyTypes.ARRAY:
+                if not self_hasattr and pobj_hasattr:
+                    if not property.editable:
+                        raise ObjectValidationException("Tried to add a property, but it is non-editable (setting '%s' to %s)""" % (name, pobj_value))
+                    else:
+                        changes[name] = ArrayPropertyChange(PropertyChange.ADD, None, None, None)
+                elif self_hasattr and not pobj_hasattr:
+                    if not property.editable:
+                        raise ObjectValidationException("Tried to remove a property, but it is non-editable (removing '%s' = %s)""" % (name, self_value))
+                    else:
+                        changes[name] = ArrayPropertyChange(PropertyChange.REMOVE, None, None, None)
+                elif self_hasattr and pobj_hasattr:
+                    if property.items in (PropertyTypes.STRING, PropertyTypes.INTEGER, PropertyTypes.NUMBER, PropertyTypes.BOOLEAN, PropertyTypes.NULL):
+                        self_set = set(self_value)
+                        pobj_set = set(pobj_value)
+                        
+                        add = list(pobj_set - self_set)
+                        remove = list(self_set - pobj_set)
+                        
+                        if len(add) + len(remove) > 0:
+                            if property.editable: 
+                                changes[name] = ArrayPropertyChange(PropertyChange.EDIT, add, remove, {})
+                            else:                        
+                                raise ObjectValidationException("Tried to add/remove items from non-editable array '%s' (Add: %s  Remove: %s)""" % (name, add, remove))
+                    elif inspect.isclass(property.items) and issubclass(property.items, PersistentObject):
+                        if property.items_unique:
+                            self_set = set(self_value.keys())
+                            pobj_set = set(pobj_value.keys())
+                            
+                            add = list(pobj_set - self_set)
+                            remove = list(self_set - pobj_set)
+                            
+                            if len(add) + len(remove) > 0 and not property.editable:
+                                raise ObjectValidationException("Tried to add/remove items from non-editable array '%s' (Add: %s  Remove: %s)""" % (name, add, remove))                            
+                            
+                            common = list(self_set & pobj_set)
+    
+                            self_items_value = dict([(k, v) for k, v in self_value.items() if k in common])
+                            pobj_items_value = dict([(k, v) for k, v in pobj_value.items() if k in common])
+                            
+                            edit = {}
+                            for s in self_items_value.values():
+                                p = pobj_items_value[s.id]
+                                item_changes = s.validate_update(p)
+                                if len(item_changes.changes) > 0:
+                                    if not property.editable:
+                                        raise ObjectValidationException("Tried to edit an item in an non-editable array '%s' (Item with id '%s')""" % (name, s.id))
+                                    else:
+                                        edit[s.id] = item_changes
+    
+                            if len(add) + len(remove) + len(edit) > 0:
+                                changes[name] = ArrayPropertyChange(PropertyChange.EDIT, add, remove, edit)
+                        else:
+                            # We have no way of telling if individual entries have been edited,
+                            # or even if entries have been added/removed, since we don't have
+                            # object equality implemented yet.
+                            pass
+                    elif property.items in (PropertyTypes.ARRAY):
+                        raise ObjectValidationException("ARRAYs of ARRAYs not supported.")                            
+                    elif property.items in (PropertyTypes.OBJECT, PropertyTypes.ANY):
+                        raise ObjectValidationException("Arbitrary types (OBJECT, ANY) not supported.")                                                
+            elif issubclass(property.type, PersistentObject):
+                if not self_hasattr and pobj_hasattr:
+                    if not property.editable:
+                        raise ObjectValidationException("Tried to add a property, but it is non-editable (setting '%s' to %s)""" % (name, pobj_value))
+                    else:
+                        changes[name] = ObjectPropertyChange(PropertyChange.ADD, None)
+                elif self_hasattr and not pobj_hasattr:
+                    if not property.editable:
+                        raise ObjectValidationException("Tried to remove a property, but it is non-editable (removing '%s' = %s)""" % (name, self_value))
+                    else:
+                        changes[name] = ObjectPropertyChange(PropertyChange.REMOVE, None)
+                elif self_hasattr and pobj_hasattr:                 
+                    property_changes = self_value.validate_update(pobj_value)
+                    if len(property_changes.changes) > 0:
+                        if not property.editable:
+                            raise ObjectValidationException("Tried to to change the value of non-editable property '%s' (Changes: '%s')""" % (name, property_changes.to_dict()))
+                        else:
+                            changes[name] = property_changes
+            elif property.type in (PropertyTypes.OBJECT, PropertyTypes.ANY):
+                raise ObjectValidationException("Arbitrary types (OBJECT, ANY) not supported.") 
+                
+        return ObjectPropertyChange(PropertyChange.EDIT, changes)               
+
+    def to_json_dict(self):
+        json = {}
+        for name, property in self.properties.items():
+            if hasattr(self, name):
+                if property.type in (PropertyTypes.STRING, PropertyTypes.INTEGER, PropertyTypes.NUMBER, PropertyTypes.BOOLEAN, PropertyTypes.NULL):
+                    value = getattr(self, name)
+                elif property.type == PropertyTypes.ARRAY:
+                    value = []
+                    
+                    if inspect.isclass(property.items) and issubclass(property.items, PersistentObject) and property.items_unique:
+                        l = getattr(self, name).values()
+                    else:
+                        l = getattr(self, name)
+                    
+                    for elem in l:
+                        if property.items in (PropertyTypes.STRING, PropertyTypes.INTEGER, PropertyTypes.NUMBER, PropertyTypes.BOOLEAN, PropertyTypes.NULL):
+                            value.append(elem)
+                        elif issubclass(property.items, PersistentObject):
+                            elem_obj = elem.to_json_dict()
+                            value.append(elem_obj)
+                        elif property.items in (PropertyTypes.ARRAY):
+                            raise ObjectValidationException("ARRAYs of ARRAYs not supported.")                            
+                        elif property.items in (PropertyTypes.OBJECT, PropertyTypes.ANY):
+                            raise ObjectValidationException("Arbitrary types (OBJECT, ANY) not supported.")
+                elif issubclass(property.type, PersistentObject):
+                    value = getattr(self, name).to_json_dict()              
+                elif property.type in (PropertyTypes.OBJECT, PropertyTypes.ANY):
+                    raise ObjectValidationException("Arbitrary types (OBJECT, ANY) not supported.")
+                json[name] = value
+                
+        return json
+
+    def to_json_string(self):
+        return json.dumps(self.to_json_dict(), indent=2)
+
+    def __primitive_to_ruby(self, value, p_type):
+        if p_type == PropertyTypes.STRING:
+            return "\"%s\"" % value
+        elif p_type == PropertyTypes.INTEGER:
+            return "%i" % value
+        elif p_type == PropertyTypes.NUMBER:
+            return "%f" % value
+        elif p_type == PropertyTypes.BOOLEAN:
+            if value == True:
+                return "true"
+            else:
+                return "false" 
+        elif p_type == PropertyTypes.NULL:
+            return "nil"        
+
+    def to_ruby_hash_string(self):
+        hash_str = "{"
+        
+        obj_items = {}
+        for name, property in self.properties.items():
+            if hasattr(self, name):
+                value = getattr(self, name)
+                if property.type in (PropertyTypes.STRING, PropertyTypes.INTEGER, PropertyTypes.NUMBER, PropertyTypes.BOOLEAN, PropertyTypes.NULL):
+                    value_str = self.__primitive_to_ruby(value, property.type)
+                elif property.type == PropertyTypes.ARRAY and inspect.isclass(property.items) and issubclass(property.items, PersistentObject) and property.items_unique:
+                    value_str = "{"
+                        
+                    items = {}
+                    for k, elem in value.items():
+                        items[k] = elem.to_ruby_hash_string()
+                        
+                    value_str += ", ".join([" \"%s\" => %s" % (k,v) for k,v in items.items()])
+                    value_str += "}"
+                elif property.type == PropertyTypes.ARRAY:
+                    value_str = "["
+                        
+                    items = []
+                    for elem in value:
+                        if property.items in (PropertyTypes.STRING, PropertyTypes.INTEGER, PropertyTypes.NUMBER, PropertyTypes.BOOLEAN, PropertyTypes.NULL):
+                            items.append( self.__primitive_to_ruby(elem, property.items) )
+                        elif issubclass(property.items, PersistentObject):
+                            items.append( elem.to_ruby_hash_string() )
+                        elif property.items in (PropertyTypes.ARRAY):
+                            raise ObjectValidationException("ARRAYs of ARRAYs not supported.")                            
+                        elif property.items in (PropertyTypes.OBJECT, PropertyTypes.ANY):
+                            raise ObjectValidationException("Arbitrary types (OBJECT, ANY) not supported.")
+
+                    value_str += ", ".join(items)
+                    value_str += "]"
+                elif inspect.isclass(property.type) and issubclass(property.type, PersistentObject):
+                    value_str = value.to_ruby_hash_string() 
+                elif property.type in (PropertyTypes.OBJECT, PropertyTypes.ANY):
+                    raise ObjectValidationException("Arbitrary types (OBJECT, ANY) not supported.")
+                obj_items[name] = value_str        
+
+        hash_str += ", ".join([" :%s => %s" % (k,v) for k,v in obj_items.items()])
+
+        hash_str += "}"
+        
+        return hash_str
+
+    @classmethod
+    def from_json_string(cls, json_string):
+        try:
+            json_dict = json.loads(json_string)
+            return cls.from_json_dict(json_dict)
+        except ValueError, ve:
+            raise ObjectValidationException("Error parsing JSON. %s" % ve)
+
+    @classmethod
+    def from_json_dict(cls, obj_dict):
+        obj = cls()
+        if not isinstance(obj_dict, dict):
+            raise ObjectValidationException("JSON provided for %s is not a dictionary" % cls.__name__)
+        
+        given_names = set(obj_dict.keys())
+        required_names = set([p.name for p in cls.properties.values() if p.required])
+        valid_names = set(cls.properties.keys())
+        
+        # Check whether required fields are present
+        missing = required_names - given_names
+        if len(missing) > 0:
+            raise ObjectValidationException("JSON provided for %s is missing required properties: %s" % (cls.__name__, ", ".join(missing)))
+        
+        # Check whether there are any unexpected fields
+        unexpected = given_names - valid_names
+        if len(unexpected) > 0:
+            raise ObjectValidationException("Encountered unexpected properties in JSON provided for %s: %s" % (cls.__name__, ", ".join(unexpected)))
+        
+        for p_name, p_value in obj_dict.items():
+            property = cls.properties[p_name]
+            if not validate_property_type(p_value, property.type, property.items, json = True):
+                raise ObjectValidationException("'%s' is not a valid value for %s.%s. Expected a %s." % (p_value, cls.__name__, p_name, pt_to_str(property.type, property.items)))
+            else:
+                if property.type in (PropertyTypes.STRING, PropertyTypes.INTEGER, PropertyTypes.NUMBER, PropertyTypes.BOOLEAN, PropertyTypes.NULL):
+                    obj.set_property(p_name, p_value)
+                    
+                elif property.type == PropertyTypes.ARRAY and property.items_unique:
+                    if property.items in (PropertyTypes.STRING, PropertyTypes.INTEGER, PropertyTypes.NUMBER, PropertyTypes.BOOLEAN, PropertyTypes.NULL):
+                        l = list(set(p_value))
+                        if len(l) < len(p_value):
+                            raise ObjectValidationException("%s.%s requires unique values, but '%s' contains duplicate values." % (cls.__name__, p_name, p_value))
+                        obj.set_property(p_name, l)
+                    if inspect.isclass(property.items) and issubclass(property.items, PersistentObject):
+                        d = {}
+                        for elem in p_value:
+                            if not elem.has_key("id"):
+                                raise ObjectValidationException("%s.%s requires unique objects, but '%s' does not have an 'id' property." % (cls.__name__, p_name, elem))
+                            key = elem["id"]
+                            if d.has_key(key):
+                                raise ObjectValidationException("%s.%s requires unique objects, but id=%s encountered twice." % (cls.__name__, p_name, key))
+                            elem_obj = property.items.from_json_dict(elem)
+                            setattr(elem_obj, "parent_%s" % cls.__name__, obj)
+                            d[key] = elem_obj
+                        obj.set_property(p_name, d)
+                    elif property.items in (PropertyTypes.ARRAY):
+                        raise ObjectValidationException("ARRAYs of ARRAYs not supported.")                            
+                    elif property.items in (PropertyTypes.OBJECT, PropertyTypes.ANY):
+                        raise ObjectValidationException("Arbitrary types (OBJECT, ANY) not supported.")     
+                                           
+                elif property.type == PropertyTypes.ARRAY and not property.items_unique:
+                        if property.items in (PropertyTypes.STRING, PropertyTypes.INTEGER, PropertyTypes.NUMBER, PropertyTypes.BOOLEAN, PropertyTypes.NULL):
+                            l = []
+                            for elem in p_value:
+                                l.append(elem)
+                            obj.set_property(p_name, l)
+                        elif inspect.isclass(property.items) and issubclass(property.items, PersistentObject):
+                            l = []
+                            for elem in p_value:
+                                elem_obj = property.items.from_json_dict(elem)
+                                l.append(elem_obj)
+                            obj.set_property(p_name, l)
+                        elif property.items in (PropertyTypes.ARRAY):
+                            raise ObjectValidationException("ARRAYs of ARRAYs not supported.")                            
+                        elif property.items in (PropertyTypes.OBJECT, PropertyTypes.ANY):
+                            raise ObjectValidationException("Arbitrary types (OBJECT, ANY) not supported.")
+                        
+                elif inspect.isclass(property.type) and issubclass(property.type, PersistentObject):
+                    p_value_obj = property.type.from_json_dict(p_value)
+                    obj.set_property(p_name, p_value_obj)               
+                    
+                elif property.type in (PropertyTypes.OBJECT, PropertyTypes.ANY):
+                    raise ObjectValidationException("Arbitrary types (OBJECT, ANY) not supported.")
+                
+        return obj


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/persistence.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/ssh.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/ssh.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/ssh.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,207 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+Remote execution and file transfer via SSH
+
+This module provides an abstraction over the paramiko package.
+"""
+
+import sys
+import paramiko
+import time
+import select
+import os.path
+import traceback
+from paramiko.ssh_exception import SSHException
+
+# Try to use our patched version of paraproxy only if
+# it is available. If it isn't, ProxyCommand support
+# will simply be unavailable
+try:
+    import dg_paraproxy
+except:
+    pass
+
+from Crypto.Random import atfork
+
+from globus.provision.common import log
+from os import walk
+
+class SSHCommandFailureException(Exception):
+    def __init__(self, ssh, command):
+        self.ssh = ssh
+        self.command = command
+        
+        
+class SSH(object):
+    def __init__(self, username, hostname, key_path, default_outf = sys.stdout, default_errf = sys.stderr, port=22):
+        self.username = username
+        self.hostname = hostname
+        self.key_path = key_path
+        self.default_outf = default_outf
+        self.default_errf = default_errf
+        self.port = port
+        
+    def open(self, timeout = 120):
+        key = paramiko.RSAKey.from_private_key_file(self.key_path)
+        connected = False
+        t_start = time.time()
+        while not connected:
+            try:
+                atfork()
+                self.client = paramiko.SSHClient()
+                self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+                self.client.connect(self.hostname, self.port, self.username, timeout=5, pkey=key)
+                connected = True
+            except Exception, e:
+                t_now = time.time()
+                if t_now - t_start > timeout:
+                    raise e
+                else:
+                    time.sleep(2)
+
+        try:
+            self.sftp = self.client.get_transport().open_sftp_client()
+        except SSHException, sshe:
+            # Some SSH servers, like the GO CLI, are not amenable to SFTP
+            log.debug("Unable to create an SFTP client on this connection.")
+            self.sftp = None  
+        
+    def close(self):
+        self.client.close()
+        
+    def run(self, command, outf=None, errf=None, exception_on_error = True, expectnooutput=False):
+        channel = self.client.get_transport().open_session()
+        
+        log.debug("%s - Running %s" % (self.hostname,command))
+        
+        if outf == None:
+            outf = self.default_outf
+    
+        if errf == None:
+            errf = self.default_errf
+            
+        try:
+            channel.exec_command(command)
+            if expectnooutput:
+                log.debug("Ignoring output from command (not expecting any)")
+            else:
+                all_out_nbytes = 0
+                all_err_nbytes = 0   
+                rem_out = ""
+                rem_err = ""
+                while True:
+                    rl, wl, xl = select.select([channel],[],[], 0.1)
+                    if len(rl) > 0:
+                        out_nbytes, rem_out = self.__recv(outf, channel.recv_ready, channel.recv, "SSH_OUT", rem_out)
+                        err_nbytes, rem_err = self.__recv(errf, channel.recv_stderr_ready, channel.recv_stderr, "SSH_ERR", rem_err)
+
+                        if out_nbytes + err_nbytes == 0:
+                            break
+
+                        all_out_nbytes += out_nbytes
+                        all_err_nbytes += err_nbytes
+
+                if all_out_nbytes == 0:
+                    log.debug("Command did not write to standard output.")
+
+                if all_err_nbytes == 0:
+                    log.debug("Command did not write to standard error.")
+            
+            log.debug("%s - Waiting for exit status: %s" % (self.hostname,command))
+            rc = channel.recv_exit_status()
+            log.debug("%s - Ran %s (exit status: %i)" % (self.hostname,command,rc))
+            channel.close()
+        except Exception, e:
+            raise # Replace by something more meaningful
+         
+        if exception_on_error and rc != 0:
+            raise SSHCommandFailureException(self, command)
+        else:
+            return rc
+    
+
+        
+        
+    def scp(self, fromf, tof):
+        # Create directory if it does not exist
+        try:
+            self.sftp.stat(os.path.dirname(tof))
+        except IOError, e:
+            pdirs = get_parent_directories(tof)
+            for d in pdirs:
+                try:
+                    self.sftp.stat(d)
+                except IOError, e:
+                    self.sftp.mkdir(d)        
+        try:
+            self.sftp.put(fromf, tof)
+        except Exception, e:
+            traceback.print_exc()
+            try:
+                self.close()
+            except:
+                pass
+        log.debug("scp %s -> %s:%s" % (fromf, self.hostname, tof))
+        
+    def scp_dir(self, fromdir, todir):
+        for root, dirs, files in walk(fromdir):
+            todir_full = todir + "/" + root[len(fromdir):]
+            try:
+                self.sftp.stat(todir_full)
+            except IOError, e:
+                self.sftp.mkdir(todir_full)
+            for f in files:
+                fromfile = root + "/" + f
+                tofile = todir_full + "/" + f
+                self.sftp.put(fromfile, tofile)
+                log.debug("scp %s -> %s:%s" % (fromfile, self.hostname, tofile))
+                
+    def __recv(self, f, ready_func, recv_func, log_label, rem):
+        nbytes = 0
+        while ready_func():
+            data = recv_func(4096)
+            if len(data) > 0:
+                nbytes += len(data)
+                
+                if f is not None: 
+                    f.write(data)
+
+                lines = data.split('\n')
+
+                if len(lines) == 1:
+                    rem += lines[0]
+                else:
+                    log.debug(log_label + ": %s" % (rem + lines[0]))
+                    for line in lines[1:-1]:
+                        log.debug(log_label + ": %s" % line)
+                    rem = lines[-1]
+                
+        if f is not None: f.flush()
+        
+        return nbytes, rem
+    
+
+def get_parent_directories(filepath):
+    dir = os.path.dirname(filepath)
+    dirs = [dir]
+    while dir != "/":
+        dir = os.path.dirname(dir)
+        dirs.append(dir)
+    dirs.reverse()
+    return dirs
+    
\ No newline at end of file


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/ssh.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/threads.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/threads.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/threads.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,163 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+Thread management
+
+This module provides an abstraction over the threading package, including
+the ability to manage the execution of a tree of threads.
+"""
+
+import os
+import sys
+import signal
+import threading
+import traceback
+from globus.provision.common import log
+
+class ThreadAbortException(Exception):
+    pass
+        
+class GPThread (threading.Thread):
+    def __init__ (self, multi, name, depends = None):
+        threading.Thread.__init__(self)
+        self.multi = multi
+        self.name = name
+        self.exception = None
+        self.stack_trace = None
+        self.status = -1
+        self.depends = depends
+        
+    def check_continue(self):
+        if self.multi.abort.is_set():
+            raise ThreadAbortException()
+        
+    def run2(self):
+        pass
+        
+    def run(self):
+        try:
+            self.run2()
+            self.status = 0
+        except Exception:
+            exc_type, exc_value, exc_traceback = sys.exc_info()
+            self.exception = exc_value
+            self.stack_trace = traceback.format_exception(exc_type, exc_value, exc_traceback)
+            self.status = 1
+            self.multi.thread_failure(self)
+            
+        if self.status == 0:
+            self.multi.thread_success(self)
+
+class MultiThread(object):
+    def __init__(self):
+        self.num_threads = 0
+        self.done_threads = 0
+        self.threads = {}
+        self.lock = threading.Lock()
+        self.all_done = threading.Event()
+        self.abort = threading.Event()
+
+    def add_thread(self, thread):
+        self.threads[thread.name] = thread     
+        self.num_threads += 1
+
+    def run(self):
+        self.done_threads = 0
+        for t in [th for th in self.threads.values() if th.depends == None]:
+            t.start()
+        self.all_done.wait()
+        
+    def thread_success(self, thread):
+        with self.lock:
+            self.done_threads += 1
+            log.debug("%s thread has finished successfully." % thread.name)
+            log.debug("%i threads are done. Remaining: %s" % (self.done_threads, ",".join([t.name for t in self.threads.values() if t.status == -1])))
+            for t in [th for th in self.threads.values() if th.depends == thread]:
+                t.start()            
+            if self.done_threads == self.num_threads:
+                self.all_done.set()            
+
+    def thread_failure(self, thread):
+        with self.lock:
+            if not isinstance(thread.exception, ThreadAbortException):
+                log.debug("%s thread has failed: %s" % (thread.name, thread.exception))
+                self.abort.set()
+            else:
+                log.debug("%s thread is being aborted." % thread.name)
+                thread.status = 2
+            self.done_threads += 1
+            self.abort_dependents(thread)
+            log.debug("%i threads are done. Remaining: %s" % (self.done_threads, ",".join([t.name for t in self.threads.values() if t.status == -1])))
+            if self.done_threads == self.num_threads:
+                self.all_done.set()           
+                
+    def abort_dependents(self, thread):
+        dep = [th for th in self.threads.values() if th.depends == thread]
+        for th in dep:
+            log.debug("%s thread is being aborted because it depends on failed %s thread." % (th.name, thread.name))
+            th.status = 3
+            self.done_threads += 1
+            self.abort_dependents(th)
+        
+    def all_success(self):
+        return all([t.status == 0 for t in self.threads.values()])
+        
+    def get_exceptions(self):
+        return dict([(t.name, (t.exception, t.stack_trace)) for t in self.threads.values() if t.status == 1]) 
+
+# From http://code.activestate.com/recipes/496735-workaround-for-missed-sigint-in-multithreaded-prog/
+# Modified so it will run a cleanup function
+class SIGINTWatcher(object):
+    """this class solves two problems with multithreaded
+    programs in Python, (1) a signal might be delivered
+    to any thread (which is just a malfeature) and (2) if
+    the thread that gets the signal is waiting, the signal
+    is ignored (which is a bug).
+
+    The watcher is a concurrent process (not thread) that
+    waits for a signal and the process that contains the
+    threads.  See Appendix A of The Little Book of Semaphores.
+    http://greenteapress.com/semaphores/
+
+    I have only tested this on Linux.  I would expect it to
+    work on the Macintosh and not work on Windows.
+    """
+    
+    def __init__(self, cleanup_func):
+        """ Creates a child thread, which returns.  The parent
+            thread waits for a KeyboardInterrupt and then kills
+            the child thread.
+        """
+        self.cleanup_func = cleanup_func
+        self.child = os.fork()
+        if self.child == 0:
+            return
+        else:
+            self.watch()
+
+    def watch(self):
+        try:
+            os.wait()
+        except KeyboardInterrupt:
+            self.cleanup_func()
+            self.kill()
+        sys.exit()
+
+    def kill(self):
+        try:
+            os.kill(self.child, signal.SIGKILL)
+        except OSError: pass


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/threads.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/utils.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/utils.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/utils.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,127 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+Miscellaneous utility functions.
+"""
+
+import glob
+import os
+
+from os import environ
+
+from boto.ec2.connection import EC2Connection,RegionInfo
+from boto import connect_ec2
+       
+
+def create_ec2_connection(hostname = None, path = None, port = None):
+    if hostname == None:
+        # We're using EC2.
+        # Check for AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY,
+        # and use EC2Connection. boto will fill in all the values
+        if not (environ.has_key("AWS_ACCESS_KEY_ID") and environ.has_key("AWS_SECRET_ACCESS_KEY")):
+            return None
+        else:
+            return EC2Connection()
+    else:
+        # We're using an EC2-ish cloud.
+        # Check for EC2_ACCESS_KEY and EC2_SECRET_KEY (these are used by Eucalyptus;
+        # we will probably have to tweak this further to support other systems)
+        if not (environ.has_key("EC2_ACCESS_KEY") and environ.has_key("EC2_SECRET_KEY")):
+            return None
+        else:
+            print "Setting region"
+            region = RegionInfo(name="eucalyptus", endpoint=hostname)
+            return connect_ec2(aws_access_key_id=environ["EC2_ACCESS_KEY"],
+                        aws_secret_access_key=environ["EC2_SECRET_KEY"],
+                        is_secure=False,
+                        region=region,
+                        port=port,
+                        path=path)            
+
+
+def parse_extra_files_files(f):
+    l = []
+    extra_f = open(f)
+    for line in extra_f:
+        srcglob, dst = line.split()
+        srcs = glob.glob(os.path.expanduser(srcglob))
+        srcs = [s for s in srcs if os.path.isfile(s)]
+        dst_isdir = (os.path.basename(dst) == "")
+        for src in srcs:
+            full_dst = dst
+            if dst_isdir:
+                full_dst += os.path.basename(src)
+            l.append( (src, full_dst) )
+    return l
+
+def rest_table(col_names, rows):
+    def gen_line(lens, char):
+        return "+" + char + (char + "+" + char).join([char * l for l in lens]) + char + "+\n"
+    
+    num_cols = len(col_names)
+    len_cols = [0] * num_cols
+    height_row = [0] * len(rows)
+    
+    table = ""
+    
+    for i, name in enumerate(col_names):
+        len_cols[i] = max(len(name), len_cols[i])
+        
+    for i, row in enumerate(rows):
+        for j in range(num_cols):
+            lines = row[j].split("\n")
+            row_len = max([len(l) for l in lines])
+            len_cols[j] = max(row_len, len_cols[j])
+            height_row[i] = max(len(lines), height_row[i])
+            
+    table += gen_line(len_cols, "-")
+
+    table += "|"
+    for i, name in enumerate(col_names): 
+        table += " "
+        table += col_names[i].ljust(len_cols[i])
+        table += " |"
+    table += "\n"
+
+    table += gen_line(len_cols, "=")
+    
+    for i, row in enumerate(rows):
+        for j in range(height_row[i]):
+            table += "|"
+            for k, col in enumerate(row): 
+                lines = col.split("\n")
+                
+                if len(lines) < j + 1:
+                    col_txt = " " * len_cols[k]
+                else:
+                    col_txt = lines[j].ljust(len_cols[k])
+                
+                table += " "
+                table += col_txt
+                table += " |"
+            table += "\n"            
+
+        table += gen_line(len_cols, "-")
+    
+    return table
+
+# From http://stackoverflow.com/questions/36932/whats-the-best-way-to-implement-an-enum-in-python
+def enum(*sequential, **named):
+    enums = dict(zip(sequential, range(len(sequential))), **named)
+    return type('Enum', (), enums)
+
+


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/common/utils.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/__init__.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/__init__.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/__init__.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,28 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+This is the core package of Globus Provision. The core is in charge of managing
+instances (creating, starting, stopping, etc.). Although the core orchestrates 
+the deployment of instances, it does not have any infrastructure-specific code. 
+In other words, the core knows how to start an instance but, when it reaches a 
+point where an infrastructure-specific action has to be taken (e.g., "start an 
+EC2 instance"), it delegates that task to the appropriate deployer (in the
+globus.provision.deploy package). 
+
+The core provides an API that is used by the Command-Line Interface, 
+and could potentially be used by other frontends.
+"""
\ No newline at end of file


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/__init__.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/api.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/api.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/api.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,735 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+"""
+The Globus Provision API
+
+This API is currently meant to be used locally (i.e., not accessible through a 
+network via a remote call interface like REST, SOAP, etc.) and by a single 
+user (i.e., there is no notion of different users owning different instances). 
+Future versions of Globus Provision may run as a daemon with a remotely-accessible 
+API that supports multiple users.
+"""
+
+import sys
+import traceback
+import os.path
+
+from boto.exception import EC2ResponseError
+
+import globus.provision.deploy.ec2 as ec2_deploy
+import globus.provision.deploy.dummy as dummy_deploy
+
+from globus.provision.core.deploy import DeploymentException
+from globus.provision.core.topology import Topology, Node
+from globus.provision.core.instance import InstanceStore, InstanceException
+from globus.provision.common.threads import MultiThread
+from globus.provision.common.ssh import SSHCommandFailureException
+from globus.provision.common import log
+from globus.provision.common.config import ConfigException
+from globus.provision.common.persistence import ObjectValidationException,\
+    PropertyChange
+from globus.provision.common.go_transfer import GlobusOnlineCLIHelper, GlobusOnlineHelper,\
+    GlobusOnlineException
+
+class API(object):
+    """
+    The Globus Provision API.
+    """
+    
+    STATUS_SUCCESS = 0
+    STATUS_FAIL = 1
+    
+    def __init__(self, instances_dir):
+        self.instances_dir = instances_dir
+        
+    def instance_create(self, topology_json, config_txt):
+        try:
+            istore = InstanceStore(self.instances_dir)
+            inst = istore.create_new_instance(topology_json, config_txt)
+        except ConfigException, cfge:
+            message = "Error in configuration file: %s" % cfge
+            return (API.STATUS_FAIL, message, None)
+        except ObjectValidationException, ove:
+            message = "Error in topology file: %s" % ove
+            return (API.STATUS_FAIL, message, None)        
+        except:
+            message = self.__unexpected_exception_to_text(what = "creating a new instance.")
+            return (API.STATUS_FAIL, message, None)
+        
+        return (API.STATUS_SUCCESS, "Success", inst.id)
+
+    def instance(self, inst_id):
+        (success, message, inst) = self.__get_instance(inst_id)
+        
+        if not success:
+            return (API.STATUS_FAIL, message, None)
+                
+        try:
+            json_string = inst.topology.to_json_string()
+        except:
+            message = self.__unexpected_exception_to_text(what = "accessing the instance's topology.")
+            return (API.STATUS_FAIL, message, None)
+        
+        return (API.STATUS_SUCCESS, "Success", json_string)
+        
+    def instance_start(self, inst_id, extra_files, run_cmds):
+        
+        (success, message, inst) = self.__get_instance(inst_id)
+        
+        if not success:
+            return (API.STATUS_FAIL, message)
+
+        log.set_logging_instance(inst)
+            
+        try:
+            deployer_class = self.__get_deployer_class(inst)
+            deployer = deployer_class(extra_files, run_cmds)
+            
+            try:
+                deployer.set_instance(inst)
+            except DeploymentException, de:
+                message = "Deployer failed to initialize. %s " % de
+                return (API.STATUS_FAIL, message)               
+            
+            if inst.topology.state == Topology.STATE_NEW:
+                resuming = False
+            elif inst.topology.state == Topology.STATE_STOPPED:
+                resuming = True
+            else:
+                message = "Cannot start an instance that is in state '%s'" % (Topology.state_str[inst.topology.state])
+                return (API.STATUS_FAIL, message)
+            
+            if not resuming:
+                inst.topology.state = Topology.STATE_STARTING
+            else:
+                inst.topology.state = Topology.STATE_RESUMING
+    
+            inst.topology.save()
+
+            if not resuming:
+                try:
+                    eps = inst.topology.get_go_endpoints()        
+                    self.__globusonline_pre_start(inst, eps)
+                except GlobusOnlineException, goe:
+                    log.warning("Unable to create GO endpoint/s: %s" % goe)
+               
+            inst.topology.save()                            
+            
+            nodes = inst.topology.get_nodes()
+    
+            (success, message, node_vm) = self.__allocate_vms(deployer, nodes, resuming)
+            
+            if not success:
+                inst.topology.state = Topology.STATE_FAILED
+                inst.topology.save()
+                return (API.STATUS_FAIL, message)
+    
+            inst.topology.state = Topology.STATE_CONFIGURING
+            inst.topology.save()
+                          
+            log.info("Instances are running.")
+    
+            for node, vm in node_vm.items():
+                deployer.post_allocate(node, vm)
+
+            inst.topology.save()
+                            
+            # Generate certificates
+            if not resuming:
+                inst.gen_certificates(force_hosts=False, force_users=False)
+            else:
+                inst.gen_certificates(force_hosts=True, force_users=False)    
+            
+            inst.topology.gen_chef_ruby_file(inst.instance_dir + "/topology.rb")
+            inst.topology.gen_hosts_file(inst.instance_dir + "/hosts")               
+    
+            log.info("Setting up Globus Provision on instances")        
+            
+            (success, message) = self.__configure_vms(deployer, node_vm)
+            if not success:
+                inst.topology.state = Topology.STATE_FAILED
+                inst.topology.save()
+                return (API.STATUS_FAIL, message)
+    
+            inst.topology.state = Topology.STATE_RUNNING
+            inst.topology.save()         
+            
+            log.info("Creating Globus Online endpoints")
+            eps = inst.topology.get_go_endpoints()        
+            if not resuming:
+                try:
+                    self.__globusonline_post_start(inst, eps)
+                except GlobusOnlineException, goe:
+                    log.warning("Unable to create GO endpoint/s: %s" % goe)
+            else:        
+                try:
+                    self.__globusonline_resume(inst, eps)
+                except GlobusOnlineException, goe:
+                    log.warning("Unable to resume GO endpoint/s: %s" % goe)            
+
+            inst.topology.save()       
+            
+            return (API.STATUS_SUCCESS, "Success")
+        except:
+            message = self.__unexpected_exception_to_text(what = "starting the instance.")
+            try:
+                if inst != None:
+                    inst.topology.state = Topology.STATE_FAILED
+                    inst.topology.save()
+            except:
+                message += "\nNote: Unable to update instance's state to 'Failed'"
+            return (API.STATUS_FAIL, message)
+
+
+    def instance_update(self, inst_id, topology_json, extra_files, run_cmds):
+        try:
+            (success, message, inst) = self.__get_instance(inst_id)
+            
+            if not success:
+                return (API.STATUS_FAIL, message)
+    
+            log.set_logging_instance(inst)
+                            
+            if inst.topology.state == Topology.STATE_NEW:
+                # If the topology is still in a New state, we simply
+                # validate that the update is valid, and replace
+                # the old topology. We don't need to deploy or
+                # configure any hosts..
+                if topology_json != None:
+                    (success, message, create_hosts, destroy_hosts) = inst.update_topology(topology_json)
+                    if not success:
+                        message = "Error in topology file: %s" % message
+                        return (API.STATUS_FAIL, message)
+                        
+                return (API.STATUS_SUCCESS, "Success")
+            elif inst.topology.state != Topology.STATE_RUNNING:
+                message = "Cannot update the topology of an instance that is in state '%s'" % (Topology.state_str[inst.topology.state])
+                return (API.STATUS_FAIL, message)        
+    
+            deployer_class = self.__get_deployer_class(inst)
+            deployer = deployer_class(extra_files, run_cmds)
+            
+            try:
+                deployer.set_instance(inst)
+            except DeploymentException, de:
+                message = "Deployer failed to initialize. %s " % de
+                return (API.STATUS_FAIL, message)    
+                
+            if topology_json != None:
+                old_topology = inst.topology
+                try:
+                    (success, message, topology_changes) = inst.update_topology(topology_json)
+                    if not success:
+                        return (API.STATUS_FAIL, message)
+                except ObjectValidationException, ove:
+                    message = "Error in topology file: %s" % ove
+                    return (API.STATUS_FAIL, message)
+                
+                create_hosts = []
+                destroy_hosts = []
+                
+                create_endpoints = []
+                remove_endpoints = []
+    
+                if topology_changes.changes.has_key("domains"):
+                    for domain in topology_changes.changes["domains"].add:
+                        d = inst.topology.domains[domain]
+                        create_hosts += [n.id for n in d.nodes.values()] 
+        
+                    for domain in topology_changes.changes["domains"].remove:
+                        d = inst.topology.domains[domain].keys()
+                        destroy_hosts += [n.id for n in d.nodes.values()] 
+                    
+                    for domain in topology_changes.changes["domains"].edit:
+                        if topology_changes.changes["domains"].edit[domain].changes.has_key("nodes"):
+                            nodes_changes = topology_changes.changes["domains"].edit[domain].changes["nodes"]
+                            create_hosts += nodes_changes.add
+                            destroy_hosts += nodes_changes.remove
+                            
+                        if topology_changes.changes["domains"].edit[domain].changes.has_key("go_endpoints"):
+                            ep_changes = topology_changes.changes["domains"].edit[domain].changes["go_endpoints"]
+                            if ep_changes.change_type == PropertyChange.ADD:
+                                create_endpoints += inst.topology.domains[domain].go_endpoints
+                            elif ep_changes.change_type == PropertyChange.REMOVE:
+                                remove_endpoints += old_topology.domains[domain].go_endpoints            
+                            elif ep_changes.change_type == PropertyChange.EDIT:
+                                create_endpoints += ep_changes.add
+                                remove_endpoints += ep_changes.remove                            
+    
+                nodes = inst.topology.get_nodes()
+    
+                if len(destroy_hosts) > 0:
+                    old_nodes = old_topology.get_nodes()
+                    log.info("Terminating hosts %s" % destroy_hosts)   
+                    old_nodes = [n for n in old_nodes if n.id in destroy_hosts]
+                    (success, message) = self.__terminate_vms(deployer, old_nodes)
+                    
+                    if not success:
+                        inst.topology.state = Topology.STATE_FAILED
+                        inst.topology.save()
+                        return (API.STATUS_FAIL, message)       
+                    
+                    inst.topology.save()         
+
+                if len(create_endpoints) > 0:
+                    try:      
+                        self.__globusonline_pre_start(inst, create_endpoints)
+                    except GlobusOnlineException, goe:
+                        log.warning("Unable to create GO endpoint/s: %s" % goe)                      
+                      
+                if len(create_hosts) > 0:
+                    nodes = inst.topology.get_nodes()
+                    log.info("Allocating VMs for hosts %s" % create_hosts)   
+                    new_nodes = [n for n in nodes if n.id in create_hosts]
+                    (success, message, node_vm) = self.__allocate_vms(deployer, new_nodes, resuming = False)
+            
+                    if not success:
+                        inst.topology.state = Topology.STATE_FAILED
+                        inst.topology.save()
+                        return (API.STATUS_FAIL, message)
+                
+                    inst.topology.save()
+                    
+                    for node, vm in node_vm.items():
+                        deployer.post_allocate(node, vm)
+    
+                    inst.topology.save()
+    
+                # Generate certificates
+                inst.gen_certificates()
+    
+                inst.topology.gen_chef_ruby_file(inst.instance_dir + "/topology.rb")
+                inst.topology.gen_hosts_file(inst.instance_dir + "/hosts")               
+
+            log.info("Setting up Globus Provision on instances")        
+            
+            # Right now we reconfigure all nodes. It shouldn't be hard to follow
+            # the dependency tree to make sure only the new nodes and "ancestor"
+            # nodes are updated
+            nodes = inst.topology.get_nodes()
+            node_vm = deployer.get_node_vm(nodes)
+            (success, message) = self.__configure_vms(deployer, node_vm)
+            if not success:
+                inst.topology.state = Topology.STATE_FAILED
+                inst.topology.save()
+                return (API.STATUS_FAIL, message)
+    
+            if topology_json != None:
+                self.__globusonline_remove(inst, remove_endpoints)
+    
+                if len(create_endpoints) > 0:
+                    try:      
+                        self.__globusonline_post_start(inst, create_endpoints)
+                    except GlobusOnlineException, goe:
+                        log.warning("Unable to create GO endpoint/s: %s" % goe)    
+    
+            inst.topology.state = Topology.STATE_RUNNING
+            inst.topology.save()
+            
+            return (API.STATUS_SUCCESS, "Success")
+        except:
+            message = self.__unexpected_exception_to_text(what = "starting the instance.")
+            try:
+                if inst != None:
+                    inst.topology.state = Topology.STATE_FAILED
+                    inst.topology.save()
+            except:
+                message += "\nNote: Unable to update instance's state to 'Failed'"
+            return (API.STATUS_FAIL, message)
+
+
+    def instance_stop(self, inst_id):
+        (success, message, inst) = self.__get_instance(inst_id)
+        
+        if not success:
+            return (API.STATUS_FAIL, message)
+
+        log.set_logging_instance(inst)
+        
+        try:
+            if inst.topology.state != Topology.STATE_RUNNING:
+                message = "Cannot start an instance that is in state '%s'" % (Topology.state_str[inst.topology.state])
+                return (API.STATUS_FAIL, message)
+
+            deployer_class = self.__get_deployer_class(inst)
+            deployer = deployer_class()
+            
+            try:
+                deployer.set_instance(inst)
+            except DeploymentException, de:
+                message = "Deployer failed to initialize. %s " % de
+                return (API.STATUS_FAIL, message)       
+        
+            inst.topology.state = Topology.STATE_STOPPING
+            inst.topology.save()
+            
+            nodes = inst.topology.get_nodes()            
+    
+            (success, message) = self.__stop_vms(deployer, nodes)
+            
+            if not success:
+                inst.topology.state = Topology.STATE_FAILED
+                inst.topology.save()
+                return (API.STATUS_FAIL, message)            
+        
+            inst.topology.state = Topology.STATE_STOPPED
+            inst.topology.save()
+              
+            log.info("Stopping Globus Online endpoints")
+            try:
+                eps = inst.topology.get_go_endpoints()        
+                self.__globusonline_stop(inst, eps)     
+                inst.topology.save()       
+            except GlobusOnlineException, goe:
+                log.warning("Unable to stop GO endpoint/s: %s" % goe)              
+              
+            log.info("Instance has stopped successfully.")
+            return (API.STATUS_SUCCESS, "Success")
+        except:
+            message = self.__unexpected_exception_to_text(what = "stopping the instance.")
+            try:
+                if inst != None:
+                    inst.topology.state = Topology.STATE_FAILED
+                    inst.topology.save()
+            except:
+                message += "\nNote: Unable to update instance's state to 'Failed'"
+            return (API.STATUS_FAIL, message)
+
+
+    def instance_terminate(self, inst_id):
+        (success, message, inst) = self.__get_instance(inst_id)
+        
+        if not success:
+            return (API.STATUS_FAIL, message)
+
+        log.set_logging_instance(inst)
+        
+        try:
+            if inst.topology.state in [Topology.STATE_NEW]:
+                message = "Cannot terminate an instance that is in state '%s'" % (Topology.state_str[inst.topology.state])
+                return (API.STATUS_FAIL, message)
+
+            deployer_class = self.__get_deployer_class(inst)
+            deployer = deployer_class()
+            
+            try:
+                deployer.set_instance(inst)
+            except DeploymentException, de:
+                message = "Deployer failed to initialize. %s " % de
+                return (API.STATUS_FAIL, message)       
+        
+            inst.topology.state = Topology.STATE_TERMINATING
+            inst.topology.save()
+            
+            nodes = inst.topology.get_nodes()            
+    
+            (success, message) = self.__terminate_vms(deployer, nodes)
+            
+            if not success:
+                inst.topology.state = Topology.STATE_FAILED
+                inst.topology.save()
+                return (API.STATUS_FAIL, message)            
+        
+            # Remove GO endpoints
+            eps = inst.topology.get_go_endpoints()        
+            self.__globusonline_remove(inst, eps)
+        
+            inst.topology.state = Topology.STATE_TERMINATED
+            inst.topology.save()
+              
+            log.info("Instances have been terminated.")
+            return (API.STATUS_SUCCESS, "Success")
+        except:
+            message = self.__unexpected_exception_to_text(what = "starting the instance.")
+            try:
+                if inst != None:
+                    inst.topology.state = Topology.STATE_FAILED
+                    inst.topology.save()
+            except:
+                message += "\nNote: Unable to update instance's state to 'Failed'"
+            return (API.STATUS_FAIL, message)
+
+
+    def instance_list(self, inst_ids):
+        istore = InstanceStore(self.instances_dir)
+        
+        (valid, invalid) = istore.get_instances(inst_ids)
+        instances_jsons = []
+        for inst in valid:
+            instances_jsons.append(inst.topology.to_json_string())
+            
+        instances_json = "[" + ",".join(instances_jsons) + "]"
+                
+        # TODO: Return invalid instances as "warnings", once we
+        # add that extra return value to the API.
+        return API.STATUS_SUCCESS, "Success", instances_json
+
+        
+    def __get_instance(self, inst_id):
+        try:
+            istore = InstanceStore(self.instances_dir)
+            inst = istore.get_instance(inst_id)
+            return (True, "Success", inst)
+        except ConfigException, cfge:
+            message = "Error in configuration file: %s" % cfge
+            return (False, message, None)
+        except ObjectValidationException, ove:
+            message = "Error in topology file: %s" % ove
+            return (False, message, None)        
+        except InstanceException, ie:
+            return (False, str(ie), None)
+        except:
+            message = self.__unexpected_exception_to_text(what = "accessing the instance.")
+            return (False, message, None)    
+        
+    def __get_deployer_class(self, inst):
+        if inst.config.get("deploy") == "ec2":
+            deploy_module = ec2_deploy
+        elif inst.config.get("deploy") == "dummy":
+            deploy_module = dummy_deploy
+            
+        return deploy_module.Deployer        
+        
+
+    def __globusonline_pre_start(self, inst, eps):
+        go_helper = GlobusOnlineHelper.from_instance(inst)
+
+        for ep in eps:        
+            if ep.has_property("globus_connect_cert") and ep.globus_connect_cert:
+                if ep.gridftp.startswith("node:"):
+                    gridftp_node = inst.topology.get_node_by_id(ep.gridftp[5:])
+                    go_helper.connect(ep.user)
+                    gc_setupkey = go_helper.endpoint_gc_create(ep, replace = True)
+                    gridftp_node.set_property("gc_setupkey", gc_setupkey)
+                    go_helper.disconnect()        
+
+
+    def __globusonline_post_start(self, inst, eps):
+        go_helper = GlobusOnlineHelper.from_instance(inst)
+        
+        for ep in eps:
+            go_helper.connect(ep.user)
+            if ep.has_property("globus_connect_cert") and ep.globus_connect_cert:
+                if ep.gridftp.startswith("node:"):
+                    go_helper.endpoint_gc_create_finalize(ep)
+            else:        
+                go_helper.create_endpoint(ep, replace=True)
+            go_helper.disconnect()
+                    
+    def __globusonline_remove(self, inst, eps):
+        go_helper = GlobusOnlineHelper.from_instance(inst)
+        
+        try:
+            for ep in eps:     
+                go_helper.connect(ep.user)
+                try:
+                    go_helper.endpoint_remove(ep)
+                except:
+                    pass   
+                go_helper.disconnect()
+        except GlobusOnlineException, goe:
+            log.warning("Unable to remove GO endpoint/s: %s" % goe)        
+        
+                    
+    def __globusonline_stop(self, inst, eps):
+        go_helper = GlobusOnlineHelper.from_instance(inst)
+        
+        for ep in eps:
+            go_helper.connect(ep.user)
+            go_helper.endpoint_stop(ep)
+            go_helper.disconnect()                    
+
+    def __globusonline_resume(self, inst, eps):
+        go_helper = GlobusOnlineHelper.from_instance(inst)
+        
+        for ep in eps:
+            go_helper.connect(ep.user)
+            go_helper.endpoint_resume(ep)
+            go_helper.disconnect()                 
+
+        
+    def __allocate_vms(self, deployer, nodes, resuming):
+        # TODO: Make this an option
+        sequential = False
+        topology = deployer.instance.topology
+        
+        if not resuming:
+            log.info("Allocating %i VMs." % len(nodes))
+            next_state = Node.STATE_RUNNING_UNCONFIGURED
+        else:
+            log.info("Resuming %i VMs" % len(nodes))
+            next_state = Node.STATE_RESUMED_UNCONFIGURED
+        node_vm = {}
+        for n in nodes:
+            try:
+                if not resuming:
+                    n.set_property("state", Node.STATE_STARTING)
+                    topology.save()
+                    vm = deployer.allocate_vm(n)
+                else:
+                    n.set_property("state", Node.STATE_RESUMING)
+                    topology.save()
+                    vm = deployer.resume_vm(n)
+                node_vm[n] = vm
+            except Exception:
+                message = self.__unexpected_exception_to_text()
+                return (False, message, None)
+        
+            if sequential:
+                log.debug("Waiting for instance to start.")
+                wait = deployer.NodeWaitThread(None, "wait-%s" % str(vm), n, vm, deployer, state = next_state)
+                wait.run2()
+                
+        if not sequential:        
+            log.debug("Waiting for instances to start.")
+            mt_instancewait = MultiThread()
+            for node, vm in node_vm.items():
+                mt_instancewait.add_thread(deployer.NodeWaitThread(mt_instancewait, "wait-%s" % str(vm), node, vm, deployer, state = next_state))
+
+            mt_instancewait.run()
+            if not mt_instancewait.all_success():
+                message = self.__mt_exceptions_to_text(mt_instancewait.get_exceptions(), "Exception raised while waiting for instances.")
+                return (False, message, None)
+            
+        return (True, "Success", node_vm)
+
+
+    def __configure_vms(self, deployer, node_vm, basic = True, chef = True):
+        nodes = node_vm.keys()
+        mt_configure = MultiThread()
+        topology = deployer.instance.topology
+        order = topology.get_launch_order(nodes)
+        
+        threads = {}
+        for nodeset in order:
+            rest = dict([(n, deployer.NodeConfigureThread(mt_configure, 
+                            "configure-%s" % n.id, 
+                            n, 
+                            node_vm[n], 
+                            deployer, 
+                            depends=threads.get(topology.get_depends(n)),
+                            basic = basic,
+                            chef = chef)) for n in nodeset])
+            threads.update(rest)
+        
+        for thread in threads.values():
+            mt_configure.add_thread(thread)
+        
+        mt_configure.run()
+        if not mt_configure.all_success():
+            message = self.__mt_exceptions_to_text(mt_configure.get_exceptions(), "Globus Provision was unable to configure the instances.")
+            return (False, message)
+        
+        return (True, "Success")
+
+    def __mt_exceptions_to_text(self, exceptions, what):
+        msg = "ERROR - " + what
+        for thread_name in exceptions:
+            msg += "\n\n"
+            exception_obj, exception_trace = exceptions[thread_name]
+            if isinstance(exception_obj, SSHCommandFailureException):
+                msg += "        %s: Error while running '%s'\n" % (thread_name, exception_obj.command)
+            elif isinstance(exception_obj, EC2ResponseError):
+                msg += "        %s: EC2 error '%s'\n" % (thread_name, exception_obj.reason)
+                msg += "        Body: %s\n" % exception_obj.body
+            else:          
+                msg += "        %s: Unexpected exception '%s'\n" % (thread_name, exception_obj.__class__.__name__)
+                msg += "        Message: %s\n" % exception_obj
+            for l in exception_trace:
+                msg += l
+        return msg
+
+            
+    def __unexpected_exception_to_text(self, what=""):
+        exc_type, exc_value, exc_traceback = sys.exc_info()
+        if what != "": what = " when " + what
+        msg = "An unexpected '%s' exception has been raised%s\n\n" % (exc_type.__name__, what)
+        msg += "Message: %s\n\n" % exc_value
+        trace = traceback.format_exception(exc_type, exc_value, exc_traceback)
+        for l in trace:
+            msg += l
+        return msg
+
+
+    def __stop_vms(self, deployer, nodes):
+        node_vm = deployer.get_node_vm(nodes)
+        topology = deployer.instance.topology
+        mt_configure = MultiThread()        
+        order = topology.get_launch_order(nodes)
+        order.reverse()
+        
+        for n in node_vm:
+            n.state = Node.STATE_STOPPING
+        topology.save()
+        
+        threads = {}
+        for nodeset in order:
+            rest = dict([(n, deployer.NodeConfigureThread(mt_configure, 
+                            "stop-configure-%s" % n.id, 
+                            n, 
+                            node_vm[n], 
+                            deployer, 
+                            depends=threads.get(topology.get_depends(n)))) for n in nodeset])
+            threads.update(rest)
+        
+        for thread in threads.values():
+            mt_configure.add_thread(thread)
+        
+        mt_configure.run()
+        if not mt_configure.all_success():
+            message = self.__mt_exceptions_to_text(mt_configure.get_exceptions(), "Globus Provision was unable to configure the instances.")
+            return (False, message)        
+        
+        
+        for nodeset in order:
+            deployer.stop_vms(nodeset)
+        
+        log.debug("Waiting for instances to stop.")
+        mt_instancewait = MultiThread()
+        for node, vm in node_vm.items():
+            mt_instancewait.add_thread(deployer.NodeWaitThread(mt_instancewait, "wait-%s" % str(vm), node, vm, deployer, state = Node.STATE_STOPPED))
+        
+        mt_instancewait.run()
+        if not mt_instancewait.all_success():
+            message = self.__mt_exceptions_to_text(mt_instancewait.get_exceptions(), "Exception raised while waiting for instances.")
+            return (False, message)     
+            
+        return (True, "Success")
+        
+    def __terminate_vms(self, deployer, nodes):
+        topology = deployer.instance.topology
+
+        for n in nodes:
+            n.state = Node.STATE_TERMINATING
+        topology.save()
+
+        deployer.terminate_vms(nodes)
+        
+        node_vm = deployer.get_node_vm(nodes)
+        
+        log.debug("Waiting for instances to terminate.")
+        mt_instancewait = MultiThread()
+        for node, vm in node_vm.items():
+            mt_instancewait.add_thread(deployer.NodeWaitThread(mt_instancewait, "wait-%s" % str(vm), node, vm, deployer, state = Node.STATE_TERMINATED))
+        
+        mt_instancewait.run()
+        if not mt_instancewait.all_success():
+            message = self.__mt_exceptions_to_text(mt_instancewait.get_exceptions(), "Exception raised while waiting for instances.")
+            return (False, message)
+            
+        return (True, "Success")
+        
+        
\ No newline at end of file


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/api.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/config.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/config.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/config.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,806 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+Contains the parsers for the two configuration files used in Globus Provision:
+
+* The instance configuration file (GPConfig): This is the configuration file
+  that specifies options related to an instance's deploymenr.
+  
+* The simple topology file: This is a simple format for specifying topologies
+  (which internally translated to the topology JSON format). It has the
+  format of a configuration file although, strictly speaking, it is *not*
+  a configuration file.    
+
+"""
+
+from globus.provision.core.topology import Domain, User, Node, Topology,\
+    DeployData, EC2DeployData, GridMapEntry, GOEndpoint
+from globus.provision.common.config import Config, Section, Option, OPTTYPE_INT, OPTTYPE_FLOAT, OPTTYPE_STRING, OPTTYPE_BOOLEAN, OPTTYPE_FILE
+import os.path
+import getpass
+
+class GPConfig(Config):
+    """
+    The instance configuration file.
+    """
+
+    sections = []    
+    
+    # ============================= #
+    #                               #
+    #        GENERAL OPTIONS        #
+    #                               #
+    # ============================= #    
+    
+    general = Section("general", required=True,
+                      doc = "This section is used for general options affecting Globus Provision as a whole.")
+    general.options = \
+    [
+     Option(name        = "ca-cert",
+            getter      = "ca-cert",
+            type        = OPTTYPE_FILE,
+            required    = False,
+            doc         = """
+            Location of CA certificate (PEM-encoded) used to generate user
+            and host certificates. If blank, Globus Provision will generate a self-signed
+            certificate from scratch.        
+            """),    
+     Option(name        = "ca-key",
+            getter      = "ca-key",
+            type        = OPTTYPE_FILE,
+            required    = False,
+            doc         = """
+            Location of the private key (PEM-encoded) for the certificate
+            specified in ``ca-cert``.
+            """),
+     Option(name        = "ca-dn",
+            getter      = "ca-dn",
+            type        = OPTTYPE_STRING,
+            required    = False,
+            doc         = """
+            Distinguished Name of the certificates that will be signed with 
+            the CA certificate specified in ``ca-cert``. 
+            
+            For example, if you set this value to ``O=Foo, OU=Bar``, the certificates
+            will have subjects like ``/O=Foo/OU=Bar/CN=borja``, ``/O=Foo/OU=Bar/CN=host/foo.example.org``, etc.
+            """),            
+     Option(name        = "scratch-dir",
+            getter      = "scratch-dir",
+            type        = OPTTYPE_STRING,
+            required    = False,
+            default     = "/var/tmp",
+            doc         = """
+            Scratch directory that Chef will use (on the provisioned machines)
+            while configuring them.
+            """),
+     Option(name        = "deploy",
+            getter      = "deploy",
+            type        = OPTTYPE_STRING,
+            required    = True,
+            valid       = ["ec2", "dummy"],
+            doc         = """
+            Globus Provision can support various "deployers" that are used to
+            deploy the hosts in a topology. Two deployers are currently supported:
+            
+            * ``ec2``: Hosts are deployed as Amazon EC2 instances.
+            * ``dummy``: Hosts are not actually deployed and are assigned dummy
+              hostnames and IP addresses.
+              
+            See the Globus Provision documentation for more details on the
+            available deployers.
+            """)     
+    ]
+
+    sections.append(general)
+
+    # ====================== #
+    #                        #
+    #      EC2 OPTIONS       #
+    #                        #
+    # ====================== #
+
+    ec2 = Section("ec2", required=False,
+                         required_if = [(("general","deploy"),"ec2")],
+                         doc = """
+                         When the EC2 deployer is selected, Globus Provision will need certain information about
+                         your EC2 account to be able to request EC2 instances on which to deploy your topology. This account
+                         information is specified in this section of the configuration file. If you are unclear on what values
+                         you need to specify here, see :ref:`chap_ec2` for more detailed instructions (including how to set up
+                         an Amazon EC2 account)""")
+    ec2.options = \
+    [                
+     Option(name        = "keypair",
+            getter      = "ec2-keypair",
+            type        = OPTTYPE_STRING,
+            required    = True,
+            doc         = """
+            The *name* of the Amazon EC2 keypair you will use to log into the VMs.
+            See :ref:`chap_ec2` for instructions on how to obtain this keypair.
+            """),
+     Option(name        = "keyfile",
+            getter      = "ec2-keyfile",
+            type        = OPTTYPE_FILE,
+            required    = True,
+            doc         = """
+            The actual location of the keypair on your local filesystem.
+            See :ref:`chap_ec2` for instructions on how to obtain this keypair.
+            """),
+     Option(name        = "username",
+            getter      = "ec2-username",
+            type        = OPTTYPE_STRING,
+            required    = True,
+            doc         = """
+            The username that Globus Provision will use to connect to the EC2 instances,
+            using the keypair specified in ``keypair``. If you are using one of the
+            Globus Provision AMIs, you need to set this value to ``ubuntu``.
+            """),     
+     Option(name        = "server-hostname",
+            getter      = "ec2-server-hostname",
+            type        = OPTTYPE_STRING,
+            required    = False,
+            doc         = """
+            The hostname of the EC2 server. If you are using Amazon AWS, leave this option
+            unspecified. If you are using an EC2-compatible system, such as OpenNebula, Nimbus,
+            Eucalyptus, etc. set this to the server running that system's EC2 interface.
+            """),
+     Option(name        = "server-port",
+            getter      = "ec2-server-port",
+            type        = OPTTYPE_INT,
+            required    = False,
+            doc         = """
+            The TCP port of the EC2 server. If you are using Amazon AWS, leave this option
+            unspecified. If you are using an EC2-compatible system, such as OpenNebula, Nimbus,
+            Eucalyptus, etc. set this to the port on which that system's EC2 interface is listening on.
+            """),
+     Option(name        = "server-path",
+            getter      = "ec2-server-path",
+            type        = OPTTYPE_STRING,
+            required    = False,
+            doc         = """
+            The path portion of the EC2 server. If you are using Amazon AWS, leave this option
+            unspecified. If you are using an EC2-compatible system, such as OpenNebula, OpenStack,
+            Eucalyptus, etc. set this to the path (in the host specified in ``server-hostname``)
+            that the system's EC2 interface is available on.
+            """)                                    
+    ]    
+    sections.append(ec2)
+
+    # ================================ #
+    #                                  #
+    #      GLOBUS ONLINE OPTIONS       #
+    #                                  #
+    # ================================ #
+
+    go = Section("globusonline", required=False,
+                  doc = """
+                  When a topology includes Globus Online transfer endpoints, Globus Provision will
+                  use GO's API to set up those endpoints. To do so, it will need some information
+                  about your GO account. If you are unclear on what values you need to specify here, 
+                  see :ref:`chap_go` for more detailed instructions.
+                  """)
+    go.options = \
+    [       
+   
+     Option(name        = "ssh-key",
+            getter      = "go-ssh-key",
+            type        = OPTTYPE_FILE,
+            default     = "~/.ssh/id_rsa",            
+            required    = False,
+            doc         = """
+            SSH key to use when connecting to the Globus Online CLI. The public key
+            for this SSH key must have been previously added to your Globus Online
+            profile.
+            """),          
+     Option(name        = "cert-file",
+            getter      = "go-cert-file",
+            type        = OPTTYPE_FILE,
+            required    = False,
+            doc         = """
+            When this option is specified, Globus Provision will access your GO
+            account using Globus Online's Transfer API (instead of sending commands
+            to Globus Online's CLI via SSH). To do so, Globus Provision needs the
+            location of a user certificate (PEM-encoded) that is authorized to access 
+            the accounts specified in your topology's endpoints.
+            
+            See :ref:`chap_go` for more details on the differences between using the
+            Transfer API, instead of the CLI via SSH.
+            """),         
+     Option(name        = "key-file",
+            getter      = "go-key-file",
+            type        = OPTTYPE_FILE,
+            required    = False,
+            doc         = """
+            Location of the private key (PEM-encoded) for the certificate
+            specified in ``cert-file``.
+            """),        
+     Option(name        = "server-ca-file",
+            getter      = "go-server-ca-file",
+            type        = OPTTYPE_STRING,
+            required    = False,
+            doc         = """
+            To verify the server certificate of the Globus Online Transfer API server,
+            Globus Provision needs the certificate of the CA that signed that certificate.
+            This file is already bundled with Globus Provision. The only reason for using
+            this option to specify a different CA certificate is in the unlikely case that
+            the API server decides to switch to a different CA (and the file bundled
+            with Globus Provision has not been updated to that CA yet).
+            """)
+    ]         
+    sections.append(go)
+      
+    def __init__(self, config_file):
+        Config.__init__(self, config_file, self.sections)
+
+
+class SimpleTopologyConfig(Config):
+    """
+    The simple topology file
+    """    
+    
+    sections = []    
+    
+    # ============================= #
+    #                               #
+    #        GENERAL OPTIONS        #
+    #                               #
+    # ============================= #    
+    
+    general = Section("general", required=True,
+                      doc = "This section is used for general options affecting all the topology.")
+    general.options = \
+    [    
+     Option(name        = "domains",
+            getter      = "domains",
+            type        = OPTTYPE_STRING,
+            required    = True,
+            doc         = """
+            The names of the domains you are defining in this topology. They must each be separated by
+            a single space.      
+            """),    
+     Option(name        = "deploy",
+            getter      = "deploy",
+            type        = OPTTYPE_STRING,
+            required    = True,
+            valid       = ["ec2", "dummy"],
+            doc         = """
+            See the :ref:`deploy option <GPConfig_deploy>` in :ref:`chap_config_ref` 
+            """),
+     Option(name        = "ssh-pubkey",
+            getter      = "ssh-pubkey",
+            type        = OPTTYPE_FILE,
+            required    = False,
+            default     = "~/.ssh/id_rsa.pub",
+            doc         = """
+            When creating users, an SSH public key must be added to their ``authorized_keys`` file
+            to allow the creator of the topology to log in as those users. When using a topology file,
+            each SSH key is specified separately for each user; in a simple topology, you can specify
+            a single SSH public key for all the users (by default, the SSH key of the topology's creator 
+            will be used)
+            
+            Take into account that you *can* specify per-user SSH keys in a simple topology by using the
+            :ref:`users-file option<SimpleTopologyConfig_users-file>`.
+            """)                                   
+    ]     
+    
+    sections.append(general)
+    
+    domain = Section("domain", required=False, multiple=("general", "domains"),
+                     doc = """
+                     For each domain specified in the ``domains`` option, you will need to specify a section
+                     titled ``[domain-DDD]`` where ``DD`` is the name of the domain. For example, if you specify the following::
+                     
+                         [general]
+                         domains: foo bar
+                         
+                     You will need to specify the following sections::
+                     
+                         [domain-foo]
+                         ...
+                         
+                         [domain-bar]
+                         ...
+                         
+                     Each section provides a few high-level options about each domain.
+                     This provides a simple, but constrained, way of specifying what services and users
+                     should be created in each domain. For more complex topologies, you may have
+                     to write a regular :ref:`topology file <chap_topology>`.                     
+                     """)
+    domain.options = \
+    [    
+     Option(name        = "users",
+            getter      = "users",
+            type        = OPTTYPE_STRING,
+            required    = False,
+            default     = "0",
+            doc         = """
+            This option can be either a number, or a list of usernames separated by spaces.
+            
+            If a number is specified, the users will be named ``D-userN``, where ``D`` is the
+            domain name and ``N`` is a number between 1 and the number specified in this option.
+            
+            If a list of usernames is specified, users with those login names will be created.
+            
+            These users will be created with corresponding user certificates. To create users without user certificates
+            use option ``users-no-cert``.        
+            """),                             
+     Option(name        = "users-no-cert",
+            getter      = "users-no-cert",
+            type        = OPTTYPE_STRING,
+            default     = "0",
+            required    = False,
+            doc         = """
+            Same as ``users`` but creating users without certificates.
+            
+            Note that if you specify a number for *both* the ``users`` and ``users-no-cert`` option 
+            (with values N and M, respectively), the first N users will have certificates, and the 
+            remaining M will not.        
+            """),                   
+     Option(name        = "users-file",
+            getter      = "users-file",
+            type        = OPTTYPE_FILE,
+            required    = False,
+            doc         = """
+            The path to a file with a specification of the users to create in this domain. This file will have one line
+            per user, each with three fields (separated by whitespace):
+            
+            #. A single character, ``C`` or ``N``. If ``C`` is specified, the user will have a user certificate created
+               for it. Otherwise, it will nor.
+            #. The user's UNIX login name.
+            #. (Optional) An SSH public key to add to the user's ``authorized_keys`` file. If not specified, the public
+               key specified in :ref:`option ssh-pubkey<SimpleTopologyConfig_ssh-pubkey>` will be used.
+              
+            For example::
+            
+                C borja     ssh-rsa FOOFOOFOO...BARBARBAR borja at example.org
+                C childers  ssh-rsa FOOFOOFOO...BARBARBAR childers at example.org
+                N foster
+                N madduri
+            
+            """),   
+     
+     Option(name        = "barebones-nodes",
+            getter      = "barebones-nodes",
+            type        = OPTTYPE_INT,
+            default     = 0,
+            required    = False,
+            doc         = """
+            A "barebones node" is a node on which no software will be installed. If ``nfs-nis`` is ``True``,
+            these nodes *will* be configured as NFS/NIS clients. These nodes can be useful for testing.   
+            """),            
+     
+     Option(name        = "nfs-nis",
+            getter      = "nfs-nis",
+            type        = OPTTYPE_BOOLEAN,
+            required    = False,
+            default     = False,
+            doc         = """
+            Specifies whether an NFS/NIS server should be setup in this domain. When ``True``, there will be a global
+            filesystem and global user account space in the domain. Most notably, the users' home directories will be on an
+            NFS directory, which means they will be able to access the same home directory from any host in the domain
+            (as opposed to having separate home directories in each host).
+            
+            When ``False``, user accounts and home directories will be created on every individual host. This option can
+            be useful if you are creating a single-host domain.       
+            """),             
+     Option(name        = "login",
+            getter      = "login",
+            type        = OPTTYPE_BOOLEAN,
+            required    = False,
+            default     = False,
+            doc         = """
+            Specifies whether a separate "login node" should be created in the topology. This option can be useful if you
+            want a distinct node that users can log into but that does not host one of the topology's servers (like the NFS
+            server, a GridFTP server, etc.)        
+            """),
+     Option(name        = "myproxy",
+            getter      = "myproxy",
+            type        = OPTTYPE_BOOLEAN,
+            required    = False,
+            default     = False,
+            doc         = """
+            Specifies whether to set up a MyProxy server on this domain.        
+            """),                           
+     Option(name        = "gram",
+            getter      = "gram",
+            type        = OPTTYPE_BOOLEAN,
+            required    = False,
+            default     = False,
+            doc         = """
+            Specifies whether to set up a GRAM5 server on this domain.             
+            """),                   
+     Option(name        = "gridftp",
+            getter      = "gridftp",
+            type        = OPTTYPE_BOOLEAN,
+            required    = False,
+            default     = False,
+            doc         = """
+            Specifies whether to set up a GridFTP server on this domain.             
+            """),                   
+     Option(name        = "lrm",
+            getter      = "lrm",
+            type        = OPTTYPE_STRING,
+            valid       = ["none", "condor"],
+            default     = "none",
+            required    = False,
+            doc         = """
+            Specifies whether to set up an LRM (Local Resource Manager) on this domain. Currently, only          
+            `Condor <http://www.cs.wisc.edu/condor/>`_ is supported.   
+            """),           
+     Option(name        = "cluster-nodes",
+            getter      = "cluster-nodes",
+            type        = OPTTYPE_INT,
+            required    = False,
+            doc         = """
+            The number of worker nodes to create for the LRM.        
+            """),         
+     Option(name        = "galaxy",
+            getter      = "galaxy",
+            type        = OPTTYPE_BOOLEAN,
+            required    = False,
+            default     = False,
+            doc         = """
+            Specifies whether to set up a Galaxy server on this domain.        
+            """),   
+              
+     Option(name        = "go-endpoint",
+            getter      = "go-endpoint",
+            type        = OPTTYPE_STRING,
+            required    = False,
+            doc         = """
+            If this domain has a GridFTP server, it can be configured as a GO endpoint.
+            The format for this option is <username>#<name> (e.g., johnsmith#test-ep).
+            Take into account that you must be authorized to use the GO account for <username>,
+            and that you must specify the appropriate credentials in the 
+            :ref:`[globusonline] section<GPConfig_section_globusonline>` of the configuration file.
+            
+            See :ref:`chap_go` for more details.    
+            """),
+               
+     Option(name        = "go-auth",
+            getter      = "go-auth",
+            type        = OPTTYPE_STRING,
+            required    = False,
+            valid       = ["myproxy", "go"],            
+            doc         = """
+            The authentication method that Globus Online will use when contacting the endpoint on
+            behalf of a user. The valid options are:
+            
+            * ``myproxy``: Contact the MyProxy server specified in the topology. Note that 
+              the :ref:`myproxy option<SimpleTopologyConfig_myproxy>` must be set to ``true`` 
+              for this to work
+            * ``go``: Use Globus Online authentication.
+              
+            See :ref:`chap_go`, and specifically :ref:`Globus Online Authentication Methods <sec_go_auth>`,
+            for more details on the implications of each authentication method.            
+            """),
+     
+     Option(name        = "go-gc",
+            getter      = "go-gc",
+            type        = OPTTYPE_BOOLEAN,
+            required    = False,
+            default     = True,
+            doc         = """
+            If true, the endpoint will use a Globus Connect certificate.
+            If not, it will use the host certificate generated by Globus Provision.
+            Take into account that, for the GridFTP server to be trusted by
+            Globus Online, it must use a certificate trusted by Globus Online.
+            Unless you used a CA trusted by Globus Online to generate the certificates
+            for the topology, you must use a Globus Connect certificate.
+            """)                            
+    ]     
+    sections.append(domain)
+    
+    ec2 = Section("ec2", required=False,
+                         required_if = [(("general","deploy"),"ec2")],
+                         doc = """
+                         When the EC2 deployer is selected, this section will allow you to
+                         specify EC2 deployment options that are specific to this topology.""")    
+    ec2.options = \
+    [                
+     Option(name        = "ami",
+            getter      = "ec2-ami",
+            type        = OPTTYPE_STRING,
+            required    = True,
+            doc         = """
+            This is the AMI (`Amazon Machine Image <http://en.wikipedia.org/wiki/Amazon_Machine_Image>`_) 
+            that Globus Provision will use to create each host in the domani. Any recent Ubuntu or Debian
+            AMI should work. Nonetheless, take into account that we provide an AMI that has most of the
+            necessary software pre-installed in it, considerably speeding up the setup of the machines. 
+            The latest Globus Provision AMI is always listed in the Globus Provision website.
+            """),
+     Option(name        = "instance-type",
+            getter      = "ec2-instance-type",
+            type        = OPTTYPE_STRING,
+            required    = True,
+            default     = "t1.micro",
+            doc         = """
+            This is the `EC2 instance type <http://en.wikipedia.org/wiki/Amazon_Machine_Image>`_ that will
+            be used to launch the machines in this domain. The default is to use micro-instances (t1.micro),
+            which tend to be enough if you are just tinkering around.
+            """),         
+     Option(name        = "availability-zone",
+            getter      = "ec2-availability-zone",
+            type        = OPTTYPE_STRING,
+            required    = False,
+            default     = None,
+            doc         = """
+            The `availability zone <http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/concepts-regions-availability-zones.html>`_ 
+            you want the VMs to be deployed in. 
+            Unless you have a good reason for choosing a specific availability zone,
+            you should let Globus Provision choose a default zone for you.
+            """)          
+    ]    
+    sections.append(ec2)    
+  
+ 
+    def __init__(self, configfile):
+        Config.__init__(self, configfile, self.sections)
+
+    def to_topology(self):
+        ssh_pubkeyf = os.path.expanduser(self.get("ssh-pubkey"))
+        ssh_pubkeyf = open(ssh_pubkeyf)
+        ssh_pubkey = ssh_pubkeyf.read().strip()
+        ssh_pubkeyf.close()        
+        
+        topology = Topology()
+        
+        if self.get("deploy") == "dummy":
+            # No default deploy data
+            pass
+        elif self.get("deploy") == "ec2":
+            deploy_data = DeployData()
+            ec2_deploy_data = EC2DeployData()
+            
+            ec2_deploy_data.set_property("ami", self.get("ec2-ami"))
+            ec2_deploy_data.set_property("instance_type", self.get("ec2-instance-type"))
+            
+            deploy_data.set_property("ec2", ec2_deploy_data)
+            topology.set_property("default_deploy_data", deploy_data)
+        
+        domains = self.get("domains").split()
+        for domain_name in domains:
+            domain = Domain()
+            domain.set_property("id", domain_name)
+            topology.add_to_array("domains", domain)
+
+            has_go_ep = self.get((domain_name,"go-endpoint")) != None
+
+            user = User()
+            user.set_property("id", getpass.getuser())
+            user.set_property("password_hash", "!")
+            user.set_property("certificate", "generated")
+            user.set_property("admin", True)
+            user.set_property("ssh_pkey", ssh_pubkey)
+            domain.add_user(user)            
+
+            usersfile = self.get((domain_name, "users-file"))
+            
+            if usersfile != None:
+                usersfile = open(usersfile, "r")
+                
+                for line in usersfile:
+                    fields = line.split()
+                    type = fields[0]
+                    username = fields[1]
+                    if len(fields) >= 3:
+                        user_ssh_pubkey = " ".join(fields[2:])
+                    else:
+                        user_ssh_pubkey = ssh_pubkey
+                    
+                    user = User()
+                    user.set_property("id", username)
+                    user.set_property("password_hash", "!")
+                    user.set_property("ssh_pkey", user_ssh_pubkey)
+                    if type == "C":
+                        user.set_property("certificate", "generated")
+                    else:
+                        user.set_property("certificate", "none")
+                        
+                    domain.add_user(user)
+                    
+                usersfile.close()
+            else:
+                users = self.get((domain_name, "users"))
+                users_nocert = self.get((domain_name, "users-no-cert"))
+                
+                if users.isdigit():
+                    num_users = int(users)
+                    usernames = [("%s-user%i" % (domain_name, i), True) for i in range(1,num_users + 1)]
+                else:
+                    num_users = 0
+                    usernames = [(u, True) for u in users.split() if u != getpass.getuser()]
+                    
+                if users_nocert.isdigit():
+                    usernames += [("%s-user%i" % (domain_name, i), False) for i in range(num_users + 1,num_users + int(users_nocert) + 1)]
+                else:
+                    usernames += [(u, False) for u in users_nocert.split() if u != getpass.getuser()]                
+
+                for username, cert in usernames:
+                    user = User()
+                    user.set_property("id", username)
+                    user.set_property("password_hash", "!")
+                    user.set_property("ssh_pkey", ssh_pubkey)
+                    if cert:
+                        user.set_property("certificate", "generated")
+                    else:
+                        user.set_property("certificate", "none")
+                    domain.add_user(user)
+                
+            for user in domain.users.values():
+                gme = GridMapEntry()
+                gme.set_property("dn", "/O=Grid/OU=Globus Provision (generated)/CN=%s" % user.id)
+                gme.set_property("login", user.id)
+                domain.add_to_array("gridmap", gme)  
+                if self.get((domain_name,"go-auth")) == "go":
+                    gme = GridMapEntry()
+                    gme.set_property("dn", "/C=US/O=Globus Consortium/OU=Globus Connect User/CN=%s" % user.id)
+                    gme.set_property("login", user.id)
+                    domain.add_to_array("gridmap", gme)  
+                                  
+            
+            if self.get((domain_name,"nfs-nis")):  
+                server_node = Node()
+                server_name = "%s-server" % domain_name
+                server_node.set_property("id", server_name)
+                server_node.add_to_array("run_list", "role[domain-nfsnis]")
+                if not self.get((domain_name,"login")):
+                    # If there is no login node, the NFS/NIS server will
+                    # effectively act as one. 
+                    server_node.add_to_array("run_list", "role[globus]")
+                if self.get((domain_name,"galaxy")):
+                    # If there is a Galaxy server in the domain, the "common"
+                    # recipe has to be installed on the NFS/NIS server
+                    server_node.add_to_array("run_list", "recipe[galaxy::galaxy-globus-common]")
+                    
+                domain.add_node(server_node)
+
+            for i in range(self.get((domain_name,"barebones-nodes"))):
+                bb_name = "%s-blank-%i" % (domain_name, i+1)
+
+                bb_node = Node()
+                bb_node.set_property("id", bb_name)
+                if self.get((domain_name,"nfs-nis")):  
+                    bb_node.set_property("depends", "node:%s" % server_name)
+                    bb_node.add_to_array("run_list", "role[domain-nfsnis-client]")
+                else:
+                    bb_node.add_to_array("run_list", "recipe[provision::gp_node]")  
+                    bb_node.add_to_array("run_list", "recipe[provision::domain_users]")              
+                               
+                domain.add_node(bb_node)
+
+            if self.get((domain_name,"login")):            
+                login_node = Node()
+                login_node.set_property("id", "%s-login" % domain_name)
+                if self.get((domain_name,"nfs-nis")):  
+                    login_node.set_property("depends", "node:%s" % server_name)
+                    login_node.add_to_array("run_list", "role[domain-nfsnis-client]")
+                else:
+                    login_node.add_to_array("run_list", "recipe[provision::gp_node]")
+                    login_node.add_to_array("run_list", "recipe[provision::domain_users]")
+                login_node.add_to_array("run_list", "role[globus]")
+                domain.add_node(login_node)                
+
+            if self.get((domain_name,"myproxy")):
+                myproxy_node = Node()
+                myproxy_node.set_property("id", "%s-myproxy" % domain_name)
+                if self.get((domain_name,"nfs-nis")):  
+                    myproxy_node.set_property("depends", "node:%s" % server_name)
+                    myproxy_node.add_to_array("run_list", "role[domain-nfsnis-client]")
+                else:
+                    myproxy_node.add_to_array("run_list", "recipe[provision::gp_node]")
+                    myproxy_node.add_to_array("run_list", "recipe[provision::domain_users]")
+                myproxy_node.add_to_array("run_list", "role[domain-myproxy]")
+                domain.add_node(myproxy_node)
+
+            if self.get((domain_name,"gridftp")):
+                gridftp_node = Node()
+                gridftp_node.set_property("id", "%s-gridftp" % domain_name)
+                if self.get((domain_name,"nfs-nis")):  
+                    gridftp_node.set_property("depends", "node:%s" % server_name)
+                    gridftp_node.add_to_array("run_list", "role[domain-nfsnis-client]")
+                else:
+                    gridftp_node.add_to_array("run_list", "recipe[provision::gp_node]")
+                    gridftp_node.add_to_array("run_list", "recipe[provision::domain_users]")     
+                    
+                if has_go_ep:
+                    if self.get((domain_name,"go-gc")):
+                        gridftp_node.add_to_array("run_list", "role[domain-gridftp-gc]")
+                    else:
+                        gridftp_node.add_to_array("run_list", "recipe[globus::go_cert]")
+                        gridftp_node.add_to_array("run_list", "role[domain-gridftp-default]")
+                else:                
+                    gridftp_node.add_to_array("run_list", "role[domain-gridftp-default]")
+                domain.add_node(gridftp_node)                
+            
+            if self.get((domain_name,"galaxy")):
+                galaxy_node = Node()
+                galaxy_node.set_property("id", "%s-galaxy" % domain_name)
+
+                if self.get((domain_name,"nfs-nis")):  
+                    galaxy_node.set_property("depends", "node:%s" % server_name)
+                    galaxy_node.add_to_array("run_list", "role[domain-nfsnis-client]")
+                else:
+                    galaxy_node.add_to_array("run_list", "recipe[provision::gp_node]")
+                    galaxy_node.add_to_array("run_list", "recipe[provision::domain_users]")     
+                    galaxy_node.add_to_array("run_list", "recipe[galaxy::galaxy-globus-common]")     
+
+                if self.get((domain_name,"go-endpoint")) != None:
+                    galaxy_node.add_to_array("run_list", "recipe[globus::go_cert]")
+                galaxy_node.add_to_array("run_list", "recipe[galaxy::galaxy-globus]")
+                domain.add_node(galaxy_node)                
+            
+            
+            lrm = self.get((domain_name,"lrm"))
+            if lrm != "none":
+                gram = self.get((domain_name,"gram"))
+                if lrm == "condor":
+                    if gram:
+                        node_name = "%s-gram-condor" % domain_name
+                        role = "role[domain-gram-condor]"
+                    else:
+                        node_name = "%s-condor" % domain_name
+                        role = "role[domain-condor]"
+                    workernode_role = "role[domain-clusternode-condor]"
+
+                lrm_node = Node()
+                lrm_node.set_property("id", node_name)
+                if self.get((domain_name,"nfs-nis")):  
+                    lrm_node.set_property("depends", "node:%s" % server_name)
+                    lrm_node.add_to_array("run_list", "role[domain-nfsnis-client]")
+                else:
+                    lrm_node.add_to_array("run_list", "recipe[provision::gp_node]")
+                    lrm_node.add_to_array("run_list", "recipe[provision::domain_users]")                    
+                lrm_node.add_to_array("run_list", role)
+                domain.add_node(lrm_node)
+
+                clusternode_host = 1
+                for i in range(self.get((domain_name,"cluster-nodes"))):
+                    wn_name = "%s-condor-wn%i" % (domain_name, i+1)
+
+                    wn_node = Node()
+                    wn_node.set_property("id", wn_name)
+                    wn_node.set_property("depends", "node:%s" % node_name)
+                    if self.get((domain_name,"nfs-nis")):
+                        wn_node.add_to_array("run_list", "role[domain-nfsnis-client]")          
+                    else:
+                        wn_node.add_to_array("run_list", "recipe[provision::gp_node]")
+                        wn_node.add_to_array("run_list", "recipe[provision::domain_users]")                                  
+                    wn_node.add_to_array("run_list", workernode_role)
+                    domain.add_node(wn_node)
+
+                    clusternode_host += 1
+            
+            if has_go_ep:
+                goep = GOEndpoint()
+                gouser, goname = self.get((domain_name,"go-endpoint")).split("#")
+                goep.set_property("user", gouser)
+                goep.set_property("name", goname)
+                goep.set_property("public", False)
+                goep.set_property("gridftp", "node:%s-gridftp" % domain_name)
+                
+                if self.get((domain_name,"go-auth")) == "myproxy":
+                    goep.set_property("myproxy", "node:%s-myproxy" % domain_name)
+                else:
+                    goep.set_property("myproxy", "myproxy.globusonline.org")
+
+                goep.set_property("globus_connect_cert", self.get((domain_name,"go-gc")))
+                    
+                domain.add_to_array("go_endpoints", goep)
+                
+        return topology
+
+


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/config.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/deploy.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/deploy.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/deploy.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,300 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+Core deployment classes.
+
+These classes contain code that is common to all deployers (i.e., they don't 
+contain any infrastructure-specific code).
+
+To create a new deployer, you will need to extend classes the classes
+in this module.
+
+"""
+
+from globus.provision.common.threads import GPThread
+from globus.provision.common.ssh import SSH, SSHCommandFailureException
+from globus.provision.common import log
+from globus.provision.core.topology import Node
+
+from abc import ABCMeta, abstractmethod
+
+class DeploymentException(Exception):
+    """A simple exception class used for deployment exceptions"""
+    pass
+
+class BaseDeployer(object):
+    """
+    The base class for a deployer.
+    
+    A deployer must implement all the abstract methods in this class
+    """
+    
+    __metaclass__ = ABCMeta
+    
+    def __init__(self, extra_files = [], run_cmds = []):
+        self.instance = None
+        self.extra_files = extra_files
+        self.run_cmds = run_cmds
+        
+    @abstractmethod
+    def set_instance(self, inst): pass
+    
+    @abstractmethod
+    def allocate_vm(self, node): pass
+
+    @abstractmethod
+    def post_allocate(self, node, vm): pass
+
+    @abstractmethod
+    def stop_vms(self, nodes): pass
+    
+    @abstractmethod
+    def resume_vm(self, node): pass
+        
+    @abstractmethod
+    def terminate_vms(self, nodes): pass
+        
+    @abstractmethod
+    def get_node_vm(self, nodes): pass
+        
+    @abstractmethod
+    def get_wait_thread_class(self): pass
+
+    @abstractmethod
+    def get_configure_thread_class(self): pass
+
+            
+class VM(object):
+    """
+    A VM object represents a virtual machine managed by a
+    deployer. It is basically meant as an opaque type that
+    can be returned by the deployer to the core, and then
+    passed from the core to other functions in the deployer.
+    """
+    def __init__(self):
+        pass
+    
+class WaitThread(GPThread):
+    """
+    The base class for "waiter threads".
+    
+    A derived class must implement the wait() method, with the
+    deployer-specific code that will wait until a VM
+    has reached a given state.
+    """
+    
+    __metaclass__ = ABCMeta
+        
+    def __init__(self, multi, name, node, vm, deployer, state, depends):
+        GPThread.__init__(self, multi, name, depends)
+        self.node = node
+        self.vm = vm
+        self.deployer = deployer
+        self.state = state
+
+    def run2(self):
+        topology = self.deployer.instance.topology
+        
+        self.wait()
+        
+        self.node.state = self.state
+        topology.save()
+        
+    @abstractmethod
+    def wait(self): pass
+         
+
+class ConfigureThread(GPThread):
+    """
+    The base class for "configure threads".
+    
+    This is a thread that takes care of configuring a single VM.
+    Most of the actions (e.g., SSH'ing to the VM and running Chef)
+    will be the same in most deployers. So, this class simply
+    requires that derived classes implement pre_configure()
+    and post_configure(), in case there are deployer-specific
+    actions that must be taken. The connect() method must
+    also be implemented, although it can usually just be
+    a call to ssh_connect.
+    """    
+    
+    __metaclass__ = ABCMeta
+        
+    def __init__(self, multi, name, node, vm, deployer, depends = None, basic = True, chef = True, dryrun=False):
+        GPThread.__init__(self, multi, name, depends)
+        self.domain = node.parent_Domain
+        self.node = node
+        self.vm = vm
+        self.deployer = deployer
+        self.config = deployer.instance.config
+        self.basic = basic
+        self.chef = chef
+        self.dryrun = dryrun
+
+    def run2(self):
+        topology = self.deployer.instance.topology
+        
+        if self.node.state in (Node.STATE_RUNNING_UNCONFIGURED, Node.STATE_RUNNING, Node.STATE_RESUMED_UNCONFIGURED):
+            if self.node.state == Node.STATE_RUNNING_UNCONFIGURED:
+                log.debug("Configuring node for the first time", self.node)
+                self.node.state = Node.STATE_CONFIGURING
+                next_state = Node.STATE_RUNNING
+            elif self.node.state == Node.STATE_RUNNING:
+                log.debug("Reconfiguring already-running node", self.node)
+                self.node.state = Node.STATE_RECONFIGURING
+                next_state = Node.STATE_RUNNING
+            elif self.node.state == Node.STATE_RESUMED_UNCONFIGURED:
+                log.debug("Reconfiguring resumed node", self.node)
+                self.node.state = Node.STATE_RESUMED_RECONFIGURING
+                next_state = Node.STATE_RUNNING
+            
+            topology.save()
+            
+            if not self.dryrun:
+                ssh = self.connect()
+                self.check_continue()
+                self.pre_configure(ssh)
+                self.check_continue()
+                self.configure(ssh)
+                self.check_continue()
+                self.post_configure(ssh)
+                self.check_continue()
+    
+            self.node.state = next_state
+            topology.save()
+        elif self.node.state == Node.STATE_STOPPING:
+            log.debug("Doing pre-shutdown configuration", self.node)
+            self.node.state = Node.STATE_STOPPING_CONFIGURING
+            topology.save()
+            
+            if not self.dryrun:
+                ssh = self.connect()
+                self.check_continue()
+                self.configure_stop(ssh)
+                self.check_continue()
+    
+            self.node.state = Node.STATE_STOPPING_CONFIGURED
+            topology.save()            
+
+    @abstractmethod
+    def connect(self): pass
+
+    @abstractmethod
+    def pre_configure(self): pass
+
+    @abstractmethod
+    def post_configure(self): pass
+        
+    def ssh_connect(self, username, hostname, keyfile):
+        node = self.node
+
+        log.debug("Establishing SSH connection", node)
+        ssh = SSH(username, hostname, keyfile, default_outf = None, default_errf = None)
+        try:
+            ssh.open()
+        except Exception, e:
+            log.debug("SSH connection timed out", node)
+            # Raise exception and let multi-thread manager handle it
+            raise e
+        log.debug("SSH connection established", node)
+        
+        return ssh
+        
+    def configure(self, ssh):
+        domain = self.domain
+        node = self.node
+        instance_dir = self.deployer.instance.instance_dir        
+        
+        if self.basic:
+            # Make backup copies of hostname and /etc/hosts
+            if node.state in (Node.STATE_CONFIGURING, Node.STATE_RESUMED_RECONFIGURING):
+                ssh.run("sudo cp /etc/hosts /etc/hosts.gp-bak", expectnooutput=True)
+                ssh.run("sudo cp /etc/hostname /etc/hostname.gp-bak", expectnooutput=True)
+            
+            # Upload host file and update hostname
+            log.debug("Uploading host file and updating hostname", node)
+            ssh.scp("%s/hosts" % instance_dir,
+                    "/chef/cookbooks/provision/files/default/hosts")             
+            ssh.run("sudo cp /chef/cookbooks/provision/files/default/hosts /etc/hosts", expectnooutput=True)
+    
+            ssh.run("sudo bash -c \"echo %s > /etc/hostname\"" % node.hostname, expectnooutput=True)
+            ssh.run("sudo /etc/init.d/hostname.sh || sudo /etc/init.d/hostname restart", expectnooutput=True)
+        
+        self.check_continue()
+
+        if self.chef:        
+            # Upload topology file
+            log.debug("Uploading topology file", node)
+            ssh.scp("%s/topology.rb" % instance_dir,
+                    "/chef/cookbooks/provision/attributes/topology.rb")             
+            
+            # Copy certificates
+            log.debug("Copying certificates", node)
+            ssh.scp_dir("%s/certs" % instance_dir, 
+                        "/chef/cookbooks/provision/files/default/")
+    
+            # Upload extra files
+            log.debug("Copying extra files", node)
+            for src, dst in self.deployer.extra_files:
+                ssh.scp(src, dst)
+            
+            self.check_continue()
+
+            # Run chef
+            log.debug("Running chef", node)
+            ssh.run("echo -e \"cookbook_path \\\"/chef/cookbooks\\\"\\nrole_path \\\"/chef/roles\\\"\" > /tmp/chef.conf", expectnooutput=True)        
+            ssh.run("echo '{ \"run_list\": [ %s ], \"scratch_dir\": \"%s\", \"domain_id\": \"%s\", \"node_id\": \"%s\"  }' > /tmp/chef.json" % (",".join("\"%s\"" % r for r in node.run_list), self.config.get("scratch-dir"), domain.id, node.id), expectnooutput=True)
+            
+            # Sometimes, Chef will fail because a service didn't start or restart
+            # properly (NFS-related services seem to do this occasionally).
+            # In most cases, the problem just "goes away" if you try to restart the
+            # service again. So, if Chef fails, we don't give up and try again
+            # (since the recipes are idempotent, there's no harm to running them
+            # multiple times)
+            chef_tries = 3
+            while chef_tries > 0:
+                rc = ssh.run("sudo -i chef-solo -c /tmp/chef.conf -j /tmp/chef.json", exception_on_error = False)    
+                if rc != 0:
+                    chef_tries -= 1
+                    log.debug("chef-solo failed. %i attempts left", node)
+                else:
+                    break
+                    
+            if chef_tries == 0:
+                raise DeploymentException, "Failed to configure node %s" % node.id
+                    
+            self.check_continue() 
+
+        for cmd in self.deployer.run_cmds:
+            ssh.run(cmd)
+
+        log.info("Configuration done.", node)
+        
+    def configure_stop(self, ssh):      
+        node = self.node
+  
+        log.info("Configuring node for shutdown", node)
+        ssh.run("sudo cp /etc/hosts.gp-bak /etc/hosts", expectnooutput=True)
+        ssh.run("sudo cp /etc/hostname.gp-bak /etc/hostname", expectnooutput=True)
+        ssh.run("sudo /etc/init.d/hostname.sh || sudo /etc/init.d/hostname restart", expectnooutput=True)
+        ssh.run("sudo bash -c \"echo +auto.master > /etc/auto.master\"", exception_on_error = False)
+        ssh.run("sudo bash -c \"echo > /etc/yp.conf\"", exception_on_error = False)
+        ssh.run("sudo bash -c \"echo > /etc/default/nfs-common\"", exception_on_error = False)
+
+        ssh.run("sudo update-rc.d -f nis remove", exception_on_error = False)
+        log.info("Configuration done.", node)
+        
\ No newline at end of file


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/deploy.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/instance.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/instance.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/instance.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,246 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+Instance Management
+
+This module is the single point of access to information about instances.
+See the documentation in InstanceStore and Instance for more details.
+ 
+"""
+
+import os.path
+import random
+from globus.provision.core.config import GPConfig
+from globus.provision.core.topology import Topology
+from globus.provision.common.certs import CertificateGenerator
+from globus.provision.common.persistence import ObjectValidationException
+
+class InstanceException(Exception):
+    """A simple exception class used for instance exceptions"""
+    pass
+
+class InstanceStore(object):
+    """
+    The instance database.
+    
+    Stores information on all the instances created by the user.
+    
+    Currently, it uses a simple filesystem-based model. There is a
+    designated "instances directory" (default: ~/.globusprovision/instances/).
+    When an instance is created, a directory with the instance's id is
+    created in the instances directory. For example::
+    
+         ~/.globusprovision/instances/gpi-12345678/
+         
+    All files related to an instance, including the topology file are
+    stored in that directory. Generated files (such as certificates, etc.)
+    are also stored there.
+    
+    The rest of the code only accesses the instances through this class.
+    So, it should be possible to eventually replace this with a more elaborate
+    solution (e.g., storing the instance data in a database, etc.)    
+    """
+    
+    def __init__(self, instances_dir):
+        self.instances_dir = instances_dir
+        
+    def create_new_instance(self, topology_json, config_txt):
+        created = False
+        while not created:
+            inst_id = "gpi-" + hex(random.randint(1,2**31-1))[2:].rjust(8,"0")
+            inst_dir = "%s/%s" % (self.instances_dir, inst_id)
+            if not os.path.exists(inst_dir):
+                os.makedirs(inst_dir)
+                created = True
+                
+        configf = open("%s/provision.conf" % inst_dir, "w")
+        configf.write(config_txt)
+        configf.close()
+
+        # We don't do anything with it. Just use it to raise an exception
+        # if there is anything wrong with the configuration file
+        GPConfig("%s/provision.conf" % inst_dir)
+
+        topology = Topology.from_json_string(topology_json)
+        topology.set_property("id", inst_id)
+        topology.set_property("state", Topology.STATE_NEW)
+        topology.save("%s/topology.json" % inst_dir)
+                                        
+        inst = Instance(inst_id, inst_dir)
+        
+        return inst
+    
+    def get_instance(self, inst_id):
+        inst_dir = "%s/%s" % (self.instances_dir, inst_id)
+
+        if not os.path.exists(inst_dir):
+            raise InstanceException("Instance %s does not exist" % inst_id)
+        return Instance(inst_id, inst_dir)
+
+    def get_instances(self, inst_ids = None):
+        valid_instances = []
+        invalid_instances = []
+        
+        for inst_id in self.__get_instance_ids():
+            if inst_ids == None or (inst_ids != None and inst_id in inst_ids):
+                try:
+                    inst = Instance(inst_id, "%s/%s" % (self.instances_dir, inst_id))
+                    valid_instances.append(inst)
+                except Exception, e:
+                    invalid_instances.append((inst_id,str(e)))
+        
+        return (valid_instances, invalid_instances)
+    
+    def __get_instance_ids(self):
+        inst_ids = [i for i in os.listdir(self.instances_dir)]
+        return inst_ids
+
+class Instance(object):
+    """
+    A Globus Provision Instance
+    
+    This class represents a single instance. Right now, an instance is 
+    the combination of a configuration file and a topology (both of which
+    are provided when the instance is created).
+    
+    The configuration file contains all the information about
+    the instance that will (arguably) not change during its lifetime.
+    The topology contains the specification of the hosts, users, etc.
+    that are going to be deployed, and that could change during the
+    instance's lifetime.
+    
+    For example, the configuration file specifies what keypair to use
+    when accessing EC2. Although this could conceivably change, it is
+    not as likely as a change in the topology (e.g., adding a new host,
+    changing the run list of a host, etc.)
+    
+    """
+    
+    # Relative to instance directory
+    CERTS_DIR = "/certs"
+
+    def __init__(self, inst_id, instance_dir):
+        self.instance_dir = instance_dir
+        self.id = inst_id
+        self.config = GPConfig("%s/provision.conf" % instance_dir)
+        self.topology = self.__load_topology()
+        
+    def __load_topology(self):
+        topology_file = "%s/topology.json" % self.instance_dir
+        f = open (topology_file, "r")
+        json_string = f.read()
+        topology = Topology.from_json_string(json_string)
+        topology._json_file = topology_file
+        f.close()   
+        return topology     
+
+    def update_topology(self, topology_json):
+        try:
+            topology_file = "%s/topology.json" % self.instance_dir        
+            new_topology = Topology.from_json_string(topology_json)
+            new_topology._json_file = topology_file
+        except ObjectValidationException, ove:
+            message = "Error in topology file: %s" % ove 
+            return (False, message, None)
+
+        try:
+            topology_changes = self.topology.validate_update(new_topology)
+        except ObjectValidationException, ove:
+            message = "Could not update topology: %s" % ove 
+            return (False, message, None)
+
+        self.topology = new_topology
+        self.topology.save()
+        
+        return (True, "Success", topology_changes)
+
+    def gen_certificates(self, force_hosts = False, force_users = False, force_ca = False):
+        certs_dir = self.instance_dir + self.CERTS_DIR
+        if not os.path.exists(certs_dir):
+            os.makedirs(certs_dir)  
+
+        dn = self.config.get("ca-dn")
+        if dn == None:
+            dn = "O=Grid, OU=Globus Provision (generated)"
+
+        certg = CertificateGenerator(dn)
+
+        cert_files = []
+        ca_cert_file = self.config.get("ca-cert")
+        ca_cert_key = self.config.get("ca-key")
+        
+        if ca_cert_file != None:
+            ca_cert, ca_key = certg.load_certificate(ca_cert_file, ca_cert_key)
+        else:
+            ca_cert, ca_key = certg.gen_selfsigned_ca_cert("Globus Provision CA")
+        
+        certg.set_ca(ca_cert, ca_key)
+
+        h = "%x" % ca_cert.subject_name_hash()
+
+        hash_file = open(certs_dir + "/ca_cert.hash", "w")
+        hash_file.write(h)
+        hash_file.close()   
+
+        ca_cert_file = "%s/ca_cert.pem" % certs_dir
+        ca_key_file = certs_dir + "/ca_key.pem"
+        cert_files.append(ca_cert_file)
+        cert_files.append(ca_key_file)
+        certg.save_certificate(cert = ca_cert,
+                              key = ca_key,
+                              cert_file = ca_cert_file,
+                              key_file = ca_key_file, 
+                              force = force_ca)
+
+        users = [u for u in self.topology.get_users() if u.certificate=="generated"]
+        for user in users:        
+            cert, key = certg.gen_user_cert(cn = user.id) 
+            
+            cert_file = "%s/%s_cert.pem" % (certs_dir, user.id)
+            key_file = "%s/%s_key.pem" % (certs_dir, user.id)
+            cert_files.append(cert_file)
+            cert_files.append(key_file)    
+            certg.save_certificate(cert = cert,
+                                    key = key,
+                                    cert_file = cert_file,
+                                    key_file = key_file, 
+                                    force = force_users)
+        
+        nodes = self.topology.get_nodes()
+        for n in nodes:
+            cert, key = certg.gen_host_cert(hostname = n.hostname) 
+            
+            filename = n.id
+            
+            cert_file = "%s/%s_cert.pem" % (certs_dir, filename)
+            key_file = "%s/%s_key.pem" % (certs_dir, filename)
+            cert_files.append(cert_file)
+            cert_files.append(key_file)          
+            certg.save_certificate(cert = cert,
+                                   key = key,
+                                   cert_file = cert_file,
+                                   key_file = key_file, 
+                                   force = force_hosts)        
+
+        return cert_files  
+
+
+                 
+        
+
+
+        


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/instance.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/topology.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/topology.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/topology.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,683 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+Topology
+
+This module contains classes used to manage a topology. All of these classes
+are PersistentObjects, so the properties are defined separately from
+the classes themselves, which can make the code a bit hard to read. 
+Before diving into this code, you may want to check out the topology 
+documentation (in the Globus Provision Documentation), which is automatically
+generated from the code in this module.  
+
+"""
+
+from globus.provision.common.persistence import PersistentObject, PropertyTypes,\
+    Property
+    
+class Topology(PersistentObject):
+    STATE_NEW = 1
+    STATE_STARTING = 2
+    STATE_CONFIGURING = 3
+    STATE_RUNNING = 4
+    STATE_STOPPING = 5
+    STATE_STOPPED = 6
+    STATE_RESUMING = 7
+    STATE_TERMINATING = 8
+    STATE_TERMINATED = 9
+    STATE_FAILED = 10
+    
+    # String representation of states
+    state_str = {STATE_NEW : "New",
+                 STATE_STARTING : "Starting",
+                 STATE_CONFIGURING : "Configuring",
+                 STATE_RUNNING : "Running",
+                 STATE_STOPPING : "Stopping",
+                 STATE_STOPPED : "Stopped",
+                 STATE_RESUMING : "Resuming",
+                 STATE_TERMINATING : "Terminating",
+                 STATE_TERMINATED : "Terminated",
+                 STATE_FAILED : "Failed"}        
+    
+    def get_nodes(self):
+        nodes = []
+        for domain in self.domains.values():
+            nodes += [n for n in domain.get_nodes()]
+        return nodes       
+    
+    def get_users(self):
+        users = []
+        for domain in self.domains.values():
+            users += domain.get_users()
+        return users    
+    
+    def gen_hosts_file(self, filename):
+        hosts = """127.0.0.1    localhost
+
+# The following lines are desirable for IPv6 capable hosts
+::1     localhost ip6-localhost ip6-loopback
+fe00::0 ip6-localnet
+ff00::0 ip6-mcastprefix
+ff02::1 ip6-allnodes
+ff02::2 ip6-allrouters
+ff02::3 ip6-allhosts
+
+"""
+        
+        nodes = self.get_nodes()
+        for n in nodes:
+            hosts += " ".join((n.ip, n.hostname, n.hostname.split(".")[0], "\n"))
+        
+        hostsfile = open(filename, "w")
+        hostsfile.write(hosts)
+        hostsfile.close()         
+        
+    def gen_chef_ruby_file(self, filename):
+        
+        def gen_topology_line(server_name, domain_id, recipes):
+            server = domain.find_with_recipes(recipes)
+            if len(server) > 0:
+                server_node = server[0]
+                if len(server) > 1:
+                    # TODO: Print a warning saying more than one NFS server has been found
+                    pass
+                hostname_line = "default[:topology][:domains][\"%s\"][:%s] = \"%s\"\n" % (domain_id, server_name, server_node.hostname)
+                ip_line       = "default[:topology][:domains][\"%s\"][:%s_ip] = \"%s\"\n" % (domain_id, server_name, server_node.ip)
+                
+                return hostname_line + ip_line
+            else:
+                return ""                              
+        
+        topology = "default[:topology] = %s\n" % self.to_ruby_hash_string()
+
+        for domain in self.domains.values():
+            topology += gen_topology_line("nfs_server", domain.id, ["recipe[provision::nfs_server]", "role[domain-nfsnis]"])
+            topology += gen_topology_line("nis_server", domain.id, ["recipe[provision::nis_server]", "role[domain-nfsnis]"])
+            topology += gen_topology_line("myproxy_server", domain.id, ["recipe[globus::myproxy]"])
+            topology += gen_topology_line("lrm_head", domain.id, ["recipe[condor::condor_head]", "role[domain-condor]"])
+        
+        topologyfile = open(filename, "w")
+        topologyfile.write(topology)
+        topologyfile.close()        
+    
+    def get_depends(self, node):
+        if not hasattr(node, "depends"):
+            return None
+        else:
+            return self.get_node_by_id(node.depends[5:])
+        
+    def get_launch_order(self, nodes):
+        order = []
+        parents = [n for n in nodes if self.get_depends(n) == None or self.get_depends(n) not in nodes]
+        while len(parents) > 0:
+            order.append(parents)
+            parents = [n for n in nodes if self.get_depends(n) in parents]   
+        return order        
+    
+    def get_node_by_id(self, node_id):
+        nodes = self.get_nodes()
+        node = [n for n in nodes if n.id == node_id]
+        if len(node) == 1:
+            return node[0]
+        else:
+            return None    
+        
+    def get_deploy_data(self, node, deployer, p_name):
+        if node.has_property("deploy_data") and node.deploy_data.has_property(deployer):
+            deploy_data = node.deploy_data.get_property(deployer)
+            if deploy_data.has_property(p_name):
+                return deploy_data.get_property(p_name)
+        
+        # If node doesn't have requested deploy data, return default (if any)
+        if self.has_property("default_deploy_data") and self.default_deploy_data.has_property(deployer):
+            deploy_data = self.default_deploy_data.get_property(deployer)
+            if deploy_data.has_property(p_name):
+                return deploy_data.get_property(p_name)
+            
+        return None
+    
+    def get_go_endpoints(self):    
+        eps = []
+        for domain_name, domain in self.domains.items():
+            if domain.has_property("go_endpoints"):
+                eps += domain.go_endpoints
+        return eps   
+    
+    def add_domain(self, domain):
+        self.add_to_array("domains", domain)
+        
+    
+    
+class Domain(PersistentObject):
+
+    def get_nodes(self):
+        return self.nodes.values()
+    
+    def get_users(self):
+        return self.users.values()     
+    
+    def find_with_recipes(self, recipes):
+        nodes = []
+        for node in self.nodes.values():
+            for r in recipes:
+                if r in node.run_list:
+                    nodes.append(node)
+                    continue
+        return nodes
+
+    def add_user(self, user):
+        self.add_to_array("users", user)
+        
+    def add_node(self, node):
+        self.add_to_array("nodes", node)        
+
+class DeployData(PersistentObject):
+    pass
+
+class EC2DeployData(PersistentObject):
+    pass
+
+class Node(PersistentObject):
+    STATE_NEW = 0
+    STATE_STARTING = 1
+    STATE_RUNNING_UNCONFIGURED = 2
+    STATE_CONFIGURING = 3
+    STATE_RUNNING = 4
+    STATE_RECONFIGURING = 11
+    STATE_STOPPING = 5
+    STATE_STOPPING_CONFIGURING = 12
+    STATE_STOPPING_CONFIGURED = 13
+    STATE_STOPPED = 6
+    STATE_RESUMING = 7
+    STATE_RESUMED_UNCONFIGURED = 14
+    STATE_RESUMED_RECONFIGURING = 15
+    STATE_TERMINATING = 8
+    STATE_TERMINATED = 9
+    STATE_FAILED = 10
+    
+    # String representation of states
+    state_str = {STATE_NEW : "New",
+                 STATE_STARTING : "Starting",
+                 STATE_RUNNING_UNCONFIGURED : "Running (unconfigured)",
+                 STATE_CONFIGURING : "Configuring",
+                 STATE_RUNNING : "Running",
+                 STATE_RECONFIGURING : "Running (reconfiguring)",
+                 STATE_STOPPING : "Stopping",
+                 STATE_STOPPING_CONFIGURING : "Stopping (configuring)",
+                 STATE_STOPPING_CONFIGURED : "Stopping (configured)",
+                 STATE_STOPPED : "Stopped",
+                 STATE_RESUMING : "Resuming",
+                 STATE_RESUMED_UNCONFIGURED : "Resumed (unconfigured)",
+                 STATE_RESUMED_RECONFIGURING : "Resumed (reconfiguring)",
+                 STATE_TERMINATING : "Terminating",
+                 STATE_TERMINATED : "Terminated",
+                 STATE_FAILED : "Failed"}   
+
+
+class User(PersistentObject):
+    pass
+
+class GridMapEntry(PersistentObject):
+    pass
+
+class GOEndpoint(PersistentObject):
+    pass
+
+Topology.properties = { 
+                       "id":
+                       Property(name="id",
+                                proptype = PropertyTypes.STRING,
+                                required = False,
+                                description = """
+                                Once an instance with this topology has been created,
+                                this property will contain the instance ID 
+                                (e.g., ``gpi-12345678``) assigned by Globus Provision.
+                                """),       
+                       
+                       "state":
+                       Property(name="state",
+                                proptype = PropertyTypes.INTEGER,
+                                required = False,
+                                description = """
+                                Once an instance has been created with this topology,
+                                this property indicates the state the instance is in.
+                                Possible values are:
+                                
+                                %s
+                                
+                                """ % 
+"\n                                ".join(["* %i: %s" % (i, Topology.state_str[i]) for i in sorted(Topology.state_str.keys())])),     
+                                                                        
+                       "domains": 
+                       Property(name = "domains",
+                                proptype = PropertyTypes.ARRAY,
+                                items = Domain,
+                                items_unique = True,
+                                editable = True,
+                                required = True,
+                                description = """
+                                The domains in this topology.
+                                """),
+
+                       "default_deploy_data":
+                       Property(name = "default_deploy_data",
+                                proptype = DeployData,
+                                required = False,
+                                editable = True,                                
+                                description = """
+                                The default deployment-specific data for this instance.
+                                Individual nodes can override the default values in their
+                                ``deploy_data`` property.
+                                """)          
+                       }
+
+DeployData.properties = { "ec2":
+                            Property(name = "ec2",
+                                     proptype = EC2DeployData,
+                                     required = False,
+                                     editable = True,
+                                     description = """
+                                     Used to specify EC2-specific deployment data.
+                                     """)          
+                       }
+
+EC2DeployData.properties = { 
+                            "instance_type":
+                                Property(name = "instance_type",
+                                         proptype = PropertyTypes.STRING,
+                                         required = False,
+                                         editable = True,
+                                         description = """
+                                         An EC2 instance type (e.g., ``t1.micro``, ``m1.small``, etc.)
+                                         """),
+                            
+                            "instance_id":
+                                Property(name = "instance_id",
+                                         proptype = PropertyTypes.STRING,
+                                         required = False,
+                                         description = """
+                                         Once a host has been deployed on EC2,
+                                         this property will contain its EC2 instance identifier.                                        
+                                         """),               
+                            "ami":
+                                Property(name = "ami",
+                                         proptype = PropertyTypes.STRING,
+                                         required = False,
+                                         editable = True,
+                                         description = """
+                                         The Amazon Machine Image (AMI) to use when creating
+                                         new hosts on Amazon EC2.
+                                         """),
+                            
+                            "security_groups":
+                                Property(name = "security_groups",
+                                         proptype = PropertyTypes.ARRAY,
+                                         items = PropertyTypes.STRING,
+                                         items_unique = True,                                         
+                                         required = False,
+                                         editable = True,
+                                         description = """
+                                         A list of `Security Groups <http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?using-network-security.html>`_
+                                         to apply to hosts on EC2. If no security groups are specified,
+                                         Globus Provision will create one called ``globus-provision``
+                                         that opens the TCP/UDP ports for SSH, GridFTP, and MyProxy. 
+                                         """)                                
+                       }
+
+
+Domain.properties = {
+                     "id":
+                     Property(name="id",
+                              proptype = PropertyTypes.STRING,
+                              required = True,
+                              description = """
+                              A unique name for the domain.
+                              """),               
+                              
+                     "nodes":
+                     Property(name="nodes",
+                              proptype = PropertyTypes.ARRAY,
+                              items = Node,
+                              items_unique = True,
+                              required = True,
+                              editable = True,
+                              description = """
+                              The list of hosts (or *nodes*) in this domain.
+                              """),
+                              
+                     "go_endpoints":                    
+                     Property(name="go_endpoints",
+                              proptype = PropertyTypes.ARRAY,
+                              items = GOEndpoint,
+                              required = False,
+                              editable = True,
+                              description = """
+                              The list of Globus Online endpoints defined for this domain.
+                              """),
+                                    
+                     "users": 
+                     Property(name="users",
+                              proptype = PropertyTypes.ARRAY,
+                              items = User,
+                              items_unique = True,
+                              required = True,
+                              editable = True,
+                              description = """
+                              The list of users in this domain.
+                              """),
+                            
+                     "gridmap":                                           
+                     Property(name="gridmap",
+                              proptype = PropertyTypes.ARRAY,
+                              items = GridMapEntry,
+                              required = False,
+                              editable = True,
+                              description = """
+                              The list of gridmap entries for this domain. This
+                              is the gridmap that Globus services running on this
+                              domain will use to determine if a given user is
+                              authorized to access the service.
+                              """),
+                     }
+
+Node.properties = {
+                   "id":
+                   Property(name="id",
+                            proptype = PropertyTypes.STRING,
+                            required = True,
+                            description = """
+                            A unique identifier for this host. The value of this
+                            property is only used for identification purposes
+                            (e.g., when printing the status of an instance with
+                            ``gp-instance-describe``), and will not affect other
+                            properties, like its hostname, etc. (except when using
+                            the ``dummy`` deployer).
+                            """),
+                   "state":
+                   Property(name="state",
+                            proptype = PropertyTypes.INTEGER,
+                            required = False,
+                            editable = False,
+                            description = """
+                            Once an instance with this topology has been created,
+                            this property will indicate the state of this particular
+                            host.
+                            
+                            Possible values are:
+                                
+                                %s
+                                
+                                """ % 
+"\n                                ".join(["* %i: %s" % (i, Node.state_str[i]) for i in sorted(Node.state_str.keys())])),     
+                                                                        
+                   "run_list":
+                   Property(name="run_list",
+                            proptype = PropertyTypes.ARRAY,
+                            items = PropertyTypes.STRING,
+                            required = True,
+                            editable = True,
+                            description = """
+                            The list of Chef recipes to run on this node.
+                            See :ref:`sec_runlist` for more details.
+                            """),
+                            
+                   "depends":
+                   Property(name="depends",
+                            proptype = PropertyTypes.STRING,
+                            required = False,
+                            editable = True,
+                            description = """
+                            Sometimes, a host cannot be configured until another host
+                            in the topology is configured. For example, NFS clients cannot
+                            start until the NFS server is starting. This property is
+                            used to specify such dependencies. The value of this property
+                            must be of the form node:*node_id*, where *node_id* is
+                            the identifier of another node in the domain.
+                            
+                            For example, if this node depends on ``simple-nfs`` the value
+                            of this property would be ``node:simple-nfs``.
+                            """),
+                            
+                   "hostname":
+                   Property(name="hostname",
+                            proptype = PropertyTypes.STRING,
+                            required = False,
+                            description = """
+                            The fully-qualified hostname assigned by the deployer.
+                            """),
+                            
+                   "ip":
+                   Property(name="ip",
+                            proptype = PropertyTypes.STRING,
+                            required = False,
+                            description = """
+                            The IP address assigned by the deployer.
+                            """),
+                            
+                   "public_ip":
+                   Property(name="public_ip",
+                            proptype = PropertyTypes.STRING,
+                            required = False,
+                            description = """
+                            If the IP address assigned in ``ip`` is a private, non-routable,
+                            IP address, but the host is also assigned a public IP, it will
+                            be assigned to this property by the deployer.
+                            """),                            
+                            
+                   "deploy_data":
+                   Property(name = "deploy_data",
+                            proptype = DeployData,
+                            required = False,
+                            description = """
+                            Host-specific deployment data. The values specified here
+                            will override any values specified in the topology's
+                            ``default_deploy__data`` property.
+                            """),   
+                            
+                   "gc_setupkey":
+                   Property(name = "gc_setupkey",
+                            proptype = PropertyTypes.STRING,
+                            required = False,
+                            description = """
+                            Globus Connect setup key used to obtain a certificate
+                            for use by services in this node. 
+                            """)                 
+                   
+                   }          
+
+
+User.properties = {
+                   "id":
+                   Property(name="id",                          
+                            proptype = PropertyTypes.STRING,
+                            required = True,
+                            description = """
+                            The user's login name.
+                            """),
+                            
+                   "description":
+                   Property(name="description",
+                            proptype = PropertyTypes.STRING,
+                            required = False,
+                            editable = True,
+                            description = """
+                            A description of the user.
+                            """),
+                            
+                   "password_hash":
+                   Property(name="password_hash",
+                            proptype = PropertyTypes.STRING,
+                            required = True,
+                            editable = True,
+                            description = """
+                            The password hash for the user, exactly as it will appear
+                            in the shadow file (``/etc/shadow``). To generate a password,
+                            you can use the ``mkpasswd`` command. We recommend you generate
+                            SHA-512 password hashes. For example::
+                            
+                                $ mkpasswd -m sha-512 mypassword
+                                $6$XrtqyXi4LO$8M/sk6t8zE5Ac.acLPBt577f1eGv.YnUVZPhGmBlQF/YrYnkWQPq7EMfryWEdHm664B.RaY3O8oZtbiQjXfu10
+                            
+                            The string starting with ``$6$`` is the password hash.
+                            
+                            You can disable password access for this user by setting this 
+                            property to ``!``. 
+                            """),
+                            
+                   "ssh_pkey":
+                   Property(name="ssh_pkey",
+                            proptype = PropertyTypes.STRING,
+                            required = False,
+                            editable = True,
+                            description = """
+                            A public SSH key. If a value is specified for this property,
+                            this public key will be added to the user's ``authorized_keys``
+                            file.
+                            """),
+                            
+                   "admin":
+                   Property(name="admin",
+                            proptype = PropertyTypes.BOOLEAN,
+                            required = False,
+                            editable = True,
+                            description = """
+                            If ``true``, this user will be granted passwordless sudo
+                            access on all hosts in this domain.
+                            """),
+                            
+                   "certificate":
+                   Property(name = "certificate",
+                            proptype = PropertyTypes.STRING,
+                            required = False,
+                            description = """
+                            This property can take on the following values:
+                            
+                            * ``"generated"``: A user certificate must be generated for this user.
+                            * ``"none"``: Do not generate a certificate for this user.
+                            """),           
+                   }            
+
+GridMapEntry.properties = {                   
+                           "dn": 
+                           Property(name="dn",
+                                    proptype = PropertyTypes.STRING,
+                                    required = True,
+                                    description = """
+                                    The distinguished name in the gridmap entry
+                                    (e.g., ``"/O=Grid/OU=My Grid/CN=J.Random User"``)
+                                    """),
+                                   
+                           "login":
+                           Property(name="login",
+                                    proptype = PropertyTypes.STRING,
+                                    required = True,
+                                    editable = True,
+                                    description = """
+                                    The login the distinguished name will map to.
+                                    Must be a valid login in the domain.
+                                    """),
+                           }       
+
+GOEndpoint.properties = {           
+                         
+                           "user":
+                           Property(name="user",
+                                    proptype = PropertyTypes.STRING,
+                                    required = True,
+                                    description = """
+                                    The Globus Online user account in which to create
+                                    this endpoint.
+                                    """),
+                           "name":
+                           Property(name="name",
+                                    proptype = PropertyTypes.STRING,
+                                    required = True,
+                                    description = """
+                                    The endpoint name.
+                                    """),
+
+                           "public":
+                           Property(name="public",
+                                    proptype = PropertyTypes.BOOLEAN,
+                                    required = True,
+                                    description = """
+                                    Whether the endpoint should be public or not.
+                                    """),                         
+                                   
+                           "gridftp":
+                           Property(name="gridftp",
+                                    proptype = PropertyTypes.STRING,
+                                    required = True,
+                                    editable = True,
+                                    description = """
+                                    The GridFTP server for this endpoint. You can specify
+                                    either a fully qualified hostname, or refer to an existing
+                                    node in this domain by writing node:*node_id*, 
+                                    where *node_id* is the identifier of another node in the domain.
+                                    """),
+                                   
+                           "myproxy":
+                           Property(name="myproxy",
+                                    proptype = PropertyTypes.STRING,
+                                    required = True,
+                                    editable = True,
+                                    description = """
+                                    The MyProxy server that will be used for authenticating
+                                    users that want to use this endpoint. You can specify
+                                    either a fully qualified hostname, or refer to an existing
+                                    node in this domain by writing node:*node_id*, 
+                                    where *node_id* is the identifier of another node in the domain.
+                                    
+                                    Take into account that, to set up this endpoint for
+                                    "Globus Online Authentication" (as described in :ref:`sec_go_auth`)
+                                    you will need to do the following:
+                                    
+                                    * Set this property to ``myproxy.globusonline.org``
+                                    * For each GO user you want to authorize in this endpoint,
+                                      add an entry with the following distinguished name::
+                                       
+                                           "/C=US/O=Globus Consortium/OU=Globus Connect User/CN=username"
+                                      
+                                      Where ``username`` is the username of the GO account you
+                                      want to authorized. Usually, you will want that DN to map
+                                      to the same username in the domain, although this is not
+                                      required.
+
+                                    """),
+                         
+                           "globus_connect_cert":
+                           Property(name="globus_connect_cert",
+                                    proptype = PropertyTypes.BOOLEAN,
+                                    required = False,
+                                    description = """
+                                    If true, this endpoint will use a Globus Connect certificate.
+                                    If not, it will use the host certificate generated by Globus Provision.
+                                    Take into account that, for the GridFTP server to be trusted by
+                                    Globus Online, it must use a certificate trusted by Globus Online.
+                                    Unless you used a CA trusted by Globus Online to generate the certificates
+                                    for the topology, you must use a Globus Connect certificate.
+                                    """),
+                         
+                           "globus_connect_cert_dn":
+                           Property(name="globus_connect_cert",
+                                    proptype = PropertyTypes.STRING,
+                                    required = False,
+                                    description = """
+                                    The DN of the Globus Connect certificate for this endpoint.
+                                    """)                                                               
+                           
+                        }                                                                                                                 


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/core/topology.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/__init__.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/__init__.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/__init__.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,25 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+This package contains the "deployers".
+
+Globus Provision can support multiple deployment backends called "deployers", 
+selected on a per-instance basis. Currently, Amazon EC2 is the only "real" 
+deployer available. A "dummy" deployer is also available for testing purposes. 
+However, additional deployers can be implemented by creating a child class 
+of globus.provision.core.deploy.BaseDeployer.
+"""
\ No newline at end of file


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/__init__.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/dummy/__init__.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/dummy/__init__.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/dummy/__init__.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,98 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+The dummy deployer
+
+All the actions in this deployer simply return immediately, simulating a
+backend that never fails. This deployer is useful for testing.
+"""
+
+from globus.provision.common.threads import GPThread
+import sys
+from globus.provision.common import log
+from globus.provision.core.deploy import BaseDeployer, VM, ConfigureThread, WaitThread
+from globus.provision.core.topology import Node
+
+class DummyVM(VM):
+    """
+    A "dummy VM". Doesn't actually contain anything.
+    
+    See the documentation on globus.provision.core.deploy.VM for details
+    on what the VM class is used for.
+    """
+    
+    def __init__(self):
+        VM.__init__(self)
+        
+class Deployer(BaseDeployer):
+    """
+    The dummy deployer
+    """
+  
+    def __init__(self, *args, **kwargs):
+        BaseDeployer.__init__(self, *args, **kwargs)
+
+    def set_instance(self, inst):
+        self.instance = inst
+        
+    def allocate_vm(self, node):
+        log.info("Allocated dummy VM.")     
+        return DummyVM()
+
+    def resume_vm(self, node):
+        log.info("Resumed dummy VM.")     
+        return DummyVM()
+
+    def post_allocate(self, node, vm):
+        node.hostname = "%s.gp.example.org" % node.id
+        node.ip = "1.2.3.4"
+
+    def get_node_vm(self, nodes):
+        node_vm = {}
+        for n in nodes:
+            node_vm[n] = DummyVM()
+        return node_vm
+
+    def stop_vms(self, nodes):
+        log.info("Dummy nodes terminated.")         
+
+    def terminate_vms(self, nodes):
+        log.info("Dummy nodes terminated.")
+
+    def get_wait_thread_class(self):
+        return self.NodeWaitThread
+
+    def get_configure_thread_class(self):
+        return self.NodeConfigureThread
+            
+    class NodeWaitThread(WaitThread):
+        def __init__(self, multi, name, node, vm, deployer, state, depends = None):
+            WaitThread.__init__(self, multi, name, node, vm, deployer, state, depends)
+                        
+        def wait(self):
+            log.info("Waiting for state %s" % Node.state_str[self.state])
+            
+    class NodeConfigureThread(ConfigureThread):
+        def __init__(self, multi, name, node, vm, deployer, depends = None, basic = True, chef = True):
+            ConfigureThread.__init__(self, multi, name, node, vm, deployer, depends, basic, chef, dryrun = True)            
+
+        def connect(self): pass
+    
+        def pre_configure(self): pass
+    
+        def post_configure(self): pass
+            
\ No newline at end of file


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/dummy/__init__.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/ec2/__init__.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/ec2/__init__.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/ec2/__init__.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,330 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+
+"""
+The EC2 deployer
+
+This deployer will create and manage hosts for a topology using Amazon EC2.
+"""
+
+from cPickle import load
+from boto.exception import BotoClientError, EC2ResponseError
+from globus.provision.common.utils import create_ec2_connection 
+from globus.provision.common.ssh import SSH, SSHCommandFailureException
+from globus.provision.common.threads import MultiThread, GPThread, SIGINTWatcher
+import random
+import time
+import sys
+import traceback
+import os.path
+from globus.provision.common import log
+from globus.provision.core.deploy import BaseDeployer, VM, ConfigureThread, WaitThread,\
+    DeploymentException
+from globus.provision.core.topology import DeployData, EC2DeployData, Node
+
+class EC2VM(VM):
+    """
+    Represents a VM running on EC2.
+    
+    See the documentation on globus.provision.core.deploy.VM for details
+    on what the VM class is used for.
+    """
+        
+    def __init__(self, ec2_instance):
+        self.ec2_instance = ec2_instance
+        
+    def __str__(self):
+        return self.ec2_instance.id
+
+class Deployer(BaseDeployer):
+    """
+    The EC2 deployer.
+    """
+  
+    def __init__(self, *args, **kwargs):
+        BaseDeployer.__init__(self, *args, **kwargs)
+        self.conn = None
+        self.instances = None
+        self.vols = []
+        self.supports_create_tags = True
+        self.has_gp_sg = False
+
+    def set_instance(self, inst):
+        self.instance = inst
+        self.__connect()         
+    
+    def __connect(self):
+        config = self.instance.config
+        
+        try:
+            log.debug("Connecting to EC2...")
+            ec2_server_hostname = config.get("ec2-server-hostname")
+            ec2_server_port = config.get("ec2-server-port")
+            ec2_server_path = config.get("ec2-server-path")
+            
+            if ec2_server_hostname != None:
+                self.conn = create_ec2_connection(ec2_server_hostname,
+                                                  ec2_server_path,
+                                                  ec2_server_port) 
+            else:
+                self.conn = create_ec2_connection()
+            
+            if self.conn == None:
+                raise DeploymentException, "AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables are not set."
+
+            log.debug("Connected to EC2.")
+        except BotoClientError, exc:
+            raise DeploymentException, "Could not connect to EC2. %s" % exc.reason
+        
+    def __get_security_groups(self, topology, node):
+        sgs = topology.get_deploy_data(node, "ec2", "security_groups")
+        if sgs is None:
+            sgs = []
+
+        if len(sgs) == 0:
+            if self.has_gp_sg:
+                sgs = ["globus-provision"]
+            else:
+                gp_sg = self.conn.get_all_security_groups(filters={"group-name":"globus-provision"})
+                if len(gp_sg) == 0:
+                    gp_sg = self.conn.create_security_group('globus-provision', 'Security group for Globus Provision instances')
+                
+                    # Internal
+                    gp_sg.authorize(src_group = gp_sg)
+
+                    # SSH
+                    gp_sg.authorize('tcp', 22, 22, '0.0.0.0/0')
+                
+                    # GridFTP
+                    gp_sg.authorize('tcp', 2811, 2811, '0.0.0.0/0')
+                    gp_sg.authorize('udp', 2811, 2811, '0.0.0.0/0')
+                    gp_sg.authorize('tcp', 50000, 51000, '0.0.0.0/0')
+                
+                    # MyProxy
+                    gp_sg.authorize('tcp', 7512, 7512, '0.0.0.0/0')
+
+                    # Galaxy
+                    gp_sg.authorize('tcp', 8080, 8080, '0.0.0.0/0')
+        
+                sgs = ["globus-provision"]
+                self.has_gp_sg = True
+        else:
+            all_sgs = self.conn.get_all_security_groups()
+            # TODO: Validate that the security groups are valid
+        
+        return sgs
+    
+    def allocate_vm(self, node):
+        topology = self.instance.topology
+        
+        instance_type = topology.get_deploy_data(node, "ec2", "instance_type")
+        ami = topology.get_deploy_data(node, "ec2", "ami")
+        security_groups = self.__get_security_groups(topology, node)
+
+        try:
+            image = self.conn.get_image(ami)
+        except EC2ResponseError, ec2err:
+            if ec2err.error_code in ("InvalidAMIID.NotFound", "InvalidAMIID.Malformed"):
+                raise DeploymentException, "AMI %s does not exist" % ami
+            else:
+                raise ec2err
+
+        if image == None:
+            # Workaround for this bug:
+            # https://bugs.launchpad.net/eucalyptus/+bug/495670
+            image = [i for i in self.conn.get_all_images() if i.id == ami]
+            if len(image) == 0:
+                raise DeploymentException, "AMI %s does not exist" % ami
+            else:
+                image = image[0]         
+        
+        user_data = """#cloud-config
+manage_etc_hosts: true
+"""        
+        
+        log.info(" |- Launching a %s instance for %s." % (instance_type, node.id))
+        reservation = image.run(min_count=1, 
+                                max_count=1,
+                                instance_type=instance_type,
+                                security_groups= security_groups,
+                                user_data = user_data,
+                                key_name=self.instance.config.get("ec2-keypair"),
+                                placement = None)
+        instance = reservation.instances[0]
+        
+        return EC2VM(instance)
+
+    def resume_vm(self, node):
+        ec2_instance_id = node.deploy_data.ec2.instance_id
+
+        log.info(" |- Resuming instance %s for %s." % (ec2_instance_id, node.id))        
+        started = self.conn.start_instances([ec2_instance_id])            
+        log.info(" |- Resumed instance %s." % ",".join([i.id for i in started]))
+        
+        return EC2VM(started[0])
+
+    def post_allocate(self, node, vm):
+        ec2_instance = vm.ec2_instance
+        
+        if ec2_instance.private_ip_address != None:
+            # A correct EC2 system should return this
+            node.ip = ec2_instance.private_ip_address
+        else:
+            # Unfortunately, some EC2-ish systems won't return the private IP address
+            # We fall back on the private_dns_name, which should still work
+            # (plus, some EC2-ish systems actually set this to the IP address)
+            node.ip = ec2_instance.private_dns_name
+
+        node.hostname = ec2_instance.public_dns_name
+
+        # TODO: The following won't work on EC2-ish systems behind a firewall.
+        node.public_ip = ".".join(ec2_instance.public_dns_name.split(".")[0].split("-")[1:])
+
+        if not node.has_property("deploy_data"):
+            node.deploy_data = DeployData()
+            node.deploy_data.ec2 = EC2DeployData()            
+
+        node.deploy_data.ec2.instance_id = ec2_instance.id
+
+        try:
+            if self.supports_create_tags:
+                self.conn.create_tags([ec2_instance.id], {"Name": "%s_%s" % (self.instance.id, node.id)})
+        except:
+            # Some EC2-ish systems don't support the create_tags call.
+            # If it fails, we just silently ignore it, as it is not essential,
+            # but make sure not to call it again, as EC2-ish systems will
+            # timeout instead of immediately returning an error
+            self.supports_create_tags = False
+
+
+    def get_node_vm(self, nodes):
+        ec2_instance_ids = [n.deploy_data.ec2.instance_id for n in nodes]
+        reservations = self.conn.get_all_instances(ec2_instance_ids)
+        node_vm = {}
+        for r in reservations:
+            instance = r.instances[0]
+            node = [n for n in nodes if n.deploy_data.ec2.instance_id==instance.id][0]
+            node_vm[node] = EC2VM(instance)
+        return node_vm
+
+    def stop_vms(self, nodes):
+        ec2_instance_ids = [n.deploy_data.ec2.instance_id for n in nodes]
+        log.info("Stopping EC2 instances %s." % ", ".join(ec2_instance_ids))
+        stopped = self.conn.stop_instances(ec2_instance_ids)
+        log.info("Stopped EC2 instances %s." % ", ".join([i.id for i in stopped]))
+
+    def terminate_vms(self, nodes):
+        ec2_instance_ids = [n.deploy_data.ec2.instance_id for n in nodes]
+        log.info("Terminating EC2 instances %s." % ", ".join(ec2_instance_ids))
+        terminated = self.conn.terminate_instances(ec2_instance_ids)
+        log.info("Terminated EC2 instances %s." % ", ".join([i.id for i in terminated]))
+        
+    def wait_state(self, obj, state, interval = 2.0):
+        jitter = random.uniform(0.0, 0.5)
+        while True:
+            time.sleep(interval + jitter)
+            try:
+                newstate = obj.update()
+            except EC2ResponseError, ec2err:
+                if ec2err.error_code == "InvalidInstanceID.NotFound":
+                    # If the instance was just created, this is a transient error. 
+                    # We just have to wait until the instance appears.
+                    pass
+                else:
+                    raise ec2err            
+            
+            if newstate == state:
+                return True
+        # TODO: Check errors            
+        
+    def get_wait_thread_class(self):
+        return self.NodeWaitThread
+
+    def get_configure_thread_class(self):
+        return self.NodeConfigureThread
+            
+    class NodeWaitThread(WaitThread):
+        def __init__(self, multi, name, node, vm, deployer, state, depends = None):
+            WaitThread.__init__(self, multi, name, node, vm, deployer, state, depends)
+            self.ec2_instance = vm.ec2_instance
+                        
+        def wait(self):
+            if self.state in (Node.STATE_RUNNING_UNCONFIGURED, Node.STATE_RESUMED_UNCONFIGURED):
+                self.deployer.wait_state(self.ec2_instance, "running")
+                log.info("Instance %s is running. Hostname: %s" % (self.ec2_instance.id, self.ec2_instance.public_dns_name))
+            elif self.state == Node.STATE_STOPPED:
+                self.deployer.wait_state(self.ec2_instance, "stopped")
+            elif self.state == Node.STATE_TERMINATED:
+                self.deployer.wait_state(self.ec2_instance, "terminated")
+            
+            
+    class NodeConfigureThread(ConfigureThread):
+        def __init__(self, multi, name, node, vm, deployer, depends = None, basic = True, chef = True):
+            ConfigureThread.__init__(self, multi, name, node, vm, deployer, depends, basic, chef)
+            self.ec2_instance = self.vm.ec2_instance
+            
+        def connect(self):
+            keyfile = os.path.expanduser(self.config.get("ec2-keyfile"))
+            ssh = self.ssh_connect(self.config.get("ec2-username"), self.ec2_instance.public_dns_name, keyfile)
+            return ssh
+        
+        def pre_configure(self, ssh):
+            node = self.node
+            instance = self.ec2_instance
+            
+            log.info("Setting up instance %s. Hostname: %s" % (instance.id, instance.public_dns_name), node)
+           
+            try:
+                ssh.run("ls -l /chef")
+            except SSHCommandFailureException:
+                #The image is not properly setup, so do all pre-configuration for globus-provision
+                log.info("Image is not configured with Chef, so installing...")
+
+                ssh.run("sudo chown -R %s /chef" % self.config.get("ec2-username"))
+                ssh.scp_dir("%s" % self.chef_dir, "/chef")
+
+
+
+                ssh.run("addgroup admin", exception_on_error = False)
+                ssh.run("echo \"%s `hostname`\" | sudo tee -a /etc/hosts" % instance.private_ip_address)
+
+                ssh.run("sudo apt-get install lsb-release wget")
+                ssh.run("echo \"deb http://apt.opscode.com/ `lsb_release -cs` main\" | sudo tee /etc/apt/sources.list.d/opscode.list")
+                ssh.run("wget -qO - http://apt.opscode.com/packages@opscode.com.gpg.key | sudo apt-key add -")
+                ssh.run("sudo apt-get update")
+                ssh.run("echo 'chef chef/chef_server_url string http://127.0.0.1:4000' | sudo debconf-set-selections")
+                ssh.run("sudo apt-get -q=2 install chef")
+        
+                ssh.run("echo -e \"cookbook_path \\\"/chef/cookbooks\\\"\\nrole_path \\\"/chef/roles\\\"\" > /tmp/chef.conf")        
+                ssh.run("echo '{ \"run_list\": \"recipe[provision::ec2]\", \"scratch_dir\": \"%s\" }' > /tmp/chef.json" % self.scratch_dir)
+
+                ssh.run("sudo chef-solo -c /tmp/chef.conf -j /tmp/chef.json")    
+        
+                ssh.run("sudo update-rc.d -f nis remove")
+                ssh.run("sudo update-rc.d -f condor remove")
+                ssh.run("sudo update-rc.d -f chef-client remove")
+       
+
+                log.debug("Removing private data...")
+         
+                ssh.run("sudo find /root/.*history /home/*/.*history -exec rm -f {} \;", exception_on_error = False)
+
+
+            
+                
+        def post_configure(self, ssh):
+            pass
+            


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/ec2/__init__.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/ec2/images.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/ec2/images.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/ec2/images.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,211 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2010-2011, University of Chicago                                 #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License. You may obtain    #
+# a copy of the License at                                                   #
+#                                                                            #
+# http://www.apache.org/licenses/LICENSE-2.0                                 #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS,          #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+# -------------------------------------------------------------------------- #
+from boto.exception import EC2ResponseError
+
+"""
+EC2 images utilities.
+
+Contains code to manage Globus Provision AMIs.
+"""
+
+from globus.provision.common.utils import create_ec2_connection
+from globus.provision.common.ssh import SSH
+from globus.provision.common import log
+import time
+
+class EC2AMICreator(object):
+    """
+    Used to create a Globus Provision AMI.
+    """ 
+    
+    def __init__(self, chef_dir, base_ami, ami_name, instance_type, config):
+        self.chef_dir = chef_dir
+        self.base_ami = base_ami
+        self.ami_name = ami_name
+        self.instance_type = instance_type
+        self.config = config
+
+        self.keypair = config.get("ec2-keypair")
+        self.keyfile = config.get("ec2-keyfile")
+        self.hostname = config.get("ec2-server-hostname")
+        self.port = config.get("ec2-server-port")
+        self.path = config.get("ec2-server-path")
+        self.username = config.get("ec2-username")
+        self.scratch_dir = config.get("scratch-dir")
+
+    def run(self):
+        log.init_logging(2)
+
+        conn = create_ec2_connection(hostname=self.hostname, path=self.path, port=self.port)
+
+        print "Creating instance"
+        reservation = conn.run_instances(self.base_ami, 
+                                         min_count=1, max_count=1,
+                                         instance_type=self.instance_type, 
+                                         key_name=self.keypair)
+        instance = reservation.instances[0]
+        print "Instance %s created. Waiting for it to start..." % instance.id
+        
+        while True:
+            try:
+                newstate = instance.update()
+                if newstate == "running":
+                    break
+                time.sleep(2)
+            except EC2ResponseError, ec2err:
+                if ec2err.error_code == "InvalidInstanceID.NotFound":
+                    # If the instance was just created, this is a transient error. 
+                    # We just have to wait until the instance appears.
+                    pass
+                else:
+                    raise ec2err            
+        
+        print "Instance running"
+        print self.username, instance.public_dns_name, self.keyfile
+        ssh = SSH(self.username, instance.public_dns_name, self.keyfile, None, None)
+        try:
+            ssh.open()
+        except Exception, e:
+            print e.message
+            exit(1)
+        
+        print "Copying Chef files"
+        ssh.run("sudo mkdir /chef")
+        ssh.run("sudo chown -R %s /chef" % self.username)
+        ssh.scp_dir("%s" % self.chef_dir, "/chef")
+        
+        # Some VMs don't include their hostname
+        ssh.run("echo \"%s `hostname`\" | sudo tee -a /etc/hosts" % instance.private_ip_address)
+
+        ssh.run("sudo apt-get install lsb-release wget")
+        ssh.run("echo \"deb http://apt.opscode.com/ `lsb_release -cs` main\" | sudo tee /etc/apt/sources.list.d/opscode.list")
+        ssh.run("wget -qO - http://apt.opscode.com/packages@opscode.com.gpg.key | sudo apt-key add -")
+        ssh.run("sudo apt-get update")
+        ssh.run("echo 'chef chef/chef_server_url string http://127.0.0.1:4000' | sudo debconf-set-selections")
+        ssh.run("sudo apt-get -q=2 install chef")
+        
+        ssh.run("echo -e \"cookbook_path \\\"/chef/cookbooks\\\"\\nrole_path \\\"/chef/roles\\\"\" > /tmp/chef.conf")        
+        ssh.run("echo '{ \"run_list\": \"recipe[provision::ec2]\", \"scratch_dir\": \"%s\" }' > /tmp/chef.json" % self.scratch_dir)
+
+        ssh.run("sudo chef-solo -c /tmp/chef.conf -j /tmp/chef.json")    
+        
+        ssh.run("sudo update-rc.d -f nis remove")
+        ssh.run("sudo update-rc.d -f condor remove")
+        ssh.run("sudo update-rc.d -f chef-client remove")
+        
+        print "Removing private data and authorized keys"
+        ssh.run("sudo find /root/.*history /home/*/.*history -exec rm -f {} \;", exception_on_error = False)
+        ssh.run("sudo find / -name authorized_keys -exec rm -f {} \;", exception_on_error = False)            
+            
+        # Apparently instance.stop() will terminate
+        # the instance (this is a known bug), so we 
+        # use stop_instances instead.
+        print "Stopping instance"
+        conn.stop_instances([instance.id])
+        while instance.update() != "stopped":
+            time.sleep(2)
+        print "Instance stopped"
+        
+        print "Creating AMI"
+        # Doesn't actually return AMI. Have to make it public manually.
+        ami = conn.create_image(instance.id, self.ami_name, description=self.ami_name)       
+        
+        print "Cleaning up"
+
+        
+        print "Terminating instance"
+        #conn.terminate_instances([instance.id])
+        #while instance.update() != "terminated":
+        #    time.sleep(2)
+        print "Instance terminated"   
+
+        
+
+class EC2AMIUpdater(object):
+    """
+    Used to update a Globus Provision AMI.
+    """ 
+        
+    def __init__(self, base_ami, ami_name, files, config):
+        self.base_ami = base_ami
+        self.ami_name = ami_name
+        self.files = files
+        
+        self.config = config
+
+        self.keypair = config.get("ec2-keypair")
+        self.keyfile = config.get("ec2-keyfile")
+        self.hostname = config.get("ec2-server-hostname")
+        self.port = config.get("ec2-server-port")
+        self.path = config.get("ec2-server-path")
+        self.username = config.get("ec2-username")
+
+    def run(self):
+        log.init_logging(2)
+        
+        conn = create_ec2_connection(hostname=self.hostname, path=self.path, port=self.port)
+
+        print "Creating instance"
+        reservation = conn.run_instances(self.base_ami, 
+                                         min_count=1, max_count=1,
+                                         instance_type='m1.small', 
+                                         key_name=self.keypair)
+        instance = reservation.instances[0]
+        print "Instance %s created. Waiting for it to start..." % instance.id
+        
+        while instance.update() != "running":
+            time.sleep(2)
+        
+        print "Instance running."
+
+        print "Opening SSH connection."
+        ssh = SSH(self.username, instance.public_dns_name, self.keyfile)
+        ssh.open()
+        
+        print "Copying files"        
+        for src, dst in self.files:
+            ssh.scp(src, dst)
+                  
+        print "Removing private data and authorized keys"
+        ssh.run("sudo find /root/.*history /home/*/.*history -exec rm -f {} \;", exception_on_error = False)
+        ssh.run("sudo find / -name authorized_keys -exec rm -f {} \;", exception_on_error = False)
+                  
+        # Apparently instance.stop() will terminate
+        # the instance (this is a known bug), so we 
+        # use stop_instances instead.
+        print "Stopping instance"
+        conn.stop_instances([instance.id])
+        while instance.update() != "stopped":
+            time.sleep(2)
+        print "Instance stopped"
+        
+        print "Creating AMI"
+        
+        # Doesn't actually return AMI. Have to make it public manually.
+        ami = conn.create_image(instance.id, self.ami_name, description=self.ami_name)       
+        
+        if ami != None:
+            print ami
+        print "Cleaning up"
+
+        
+        print "Terminating instance"
+        conn.terminate_instances([instance.id])
+        while instance.update() != "terminated":
+            time.sleep(2)
+        print "Instance terminated"   
+
+                


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/deploy/ec2/images.py
___________________________________________________________________
Added: svn:executable
   + *


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/tests/__init__.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/tests/common.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/tests/common.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/tests/common.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,34 @@
+from globus.provision.core.config import SimpleTopologyConfig
+import tempfile
+import shutil
+
+def load_config_file(f, dummy):
+    configf = open(f)
+    config_txt = configf.read()
+    if dummy:
+        config_txt = config_txt.replace("deploy: ec2", "deploy: dummy")
+    configf.close()
+
+    topology_file = f
+    conf = SimpleTopologyConfig(topology_file)
+    topology = conf.to_topology()
+    topology_json = topology.to_json_string()   
+    
+    return config_txt, topology_json
+
+def create_temp_config_file(f, tempf, dummy):
+    configf = open(f)
+    config_txt = configf.read()
+    if dummy:
+        config_txt = config_txt.replace("deploy: ec2", "deploy: dummy")
+    configf.close()
+    
+    configf = open(tempf, "w")
+    configf.write(config_txt)
+    configf.close()
+
+def create_instances_dir():
+    return tempfile.mkdtemp(prefix="gptesttmp")
+
+def remove_instances_dir(d):
+    shutil.rmtree(d)
\ No newline at end of file


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/tests/common.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/tests/test_samples.py
===================================================================
--- branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/tests/test_samples.py	                        (rev 0)
+++ branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/tests/test_samples.py	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,138 @@
+from globus.provision.core.api import API
+from globus.provision.tests.common import load_config_file, create_instances_dir,\
+    remove_instances_dir, create_temp_config_file
+from globus.provision.core.topology import Topology
+import json
+from globus.provision.cli.api import gp_instance_create, gp_instance_describe,\
+    gp_instance_start, gp_instance_stop, gp_instance_list, gp_instance_update,\
+    gp_instance_terminate
+import os
+
+# TODO: Assumes we're running from the source root directory. Make this location independent.
+SAMPLE_DIR = "./samples/"
+SAMPLES = ("simple-dummy.conf", "simple-ec2.conf", "single-gridftp-ec2.conf")
+
+
+def test_samples_api():
+    for s in SAMPLES:
+        yield check_sample_api, SAMPLE_DIR + s
+
+def test_samples_cli():
+    for s in SAMPLES:
+        yield check_sample_cli, SAMPLE_DIR + s
+
+
+def check_sample_api(s):
+    instances_dir = create_instances_dir()
+    
+    config_txt, topology_json = load_config_file(s, dummy = True)
+    
+    api = API(instances_dir)
+
+    (status_code, message, inst_id) = api.instance_create(topology_json, config_txt)
+    assert status_code == API.STATUS_SUCCESS
+    check_instance_state(api, inst_id, Topology.STATE_NEW)
+    
+    (status_code, message, topologies_json) = api.instance_list(None)
+    assert status_code == API.STATUS_SUCCESS
+    insts = json.loads(topologies_json)
+    assert len(insts) == 1
+    assert insts[0]["id"] == inst_id
+            
+    (status_code, message, topologies_json) = api.instance_list([inst_id])
+    assert status_code == API.STATUS_SUCCESS, message
+    insts = json.loads(topologies_json)
+    assert len(insts) == 1
+    assert insts[0]["id"] == inst_id
+    
+    (status_code, message) = api.instance_start(inst_id, [], [])
+    assert status_code == API.STATUS_SUCCESS, message
+    check_instance_state(api, inst_id, Topology.STATE_RUNNING)
+
+    (status_code, message) = api.instance_stop(inst_id)
+    assert status_code == API.STATUS_SUCCESS, message
+    check_instance_state(api, inst_id, Topology.STATE_STOPPED)
+
+    (status_code, message) = api.instance_start(inst_id, [], [])
+    assert status_code == API.STATUS_SUCCESS, message
+    check_instance_state(api, inst_id, Topology.STATE_RUNNING)
+    
+    (status_code, message) = api.instance_update(inst_id, None, [], [])
+    assert status_code == API.STATUS_SUCCESS, message
+    check_instance_state(api, inst_id, Topology.STATE_RUNNING)    
+    
+    (status_code, message) = api.instance_terminate(inst_id)
+    assert status_code == API.STATUS_SUCCESS, message
+    check_instance_state(api, inst_id, Topology.STATE_TERMINATED)
+    
+    remove_instances_dir(instances_dir)
+
+def check_sample_cli(s):
+    instances_dir = create_instances_dir()
+    temp_config_file = instances_dir + "/test.conf"
+    create_temp_config_file(s, temp_config_file, dummy = True)
+
+    common_args = ["GPCOMMAND", "-i", instances_dir]
+
+    args = ["-c", temp_config_file]
+    rc = gp_instance_create(common_args + args).run()
+    assert rc == 0
+
+    insts = [n for n in os.listdir(instances_dir) if n.startswith("gpi-")]
+    assert len(insts) == 1
+    inst_id = insts[0]
+    print inst_id
+    args = [inst_id]
+    print common_args + args
+    rc = gp_instance_describe(common_args + args).run()
+    assert rc == 0    
+
+    args = [inst_id, "-v"]
+    rc = gp_instance_describe(common_args + args).run()
+    assert rc == 0    
+
+    args = [inst_id]
+    rc = gp_instance_start(common_args + args, disable_sigintwatch = True).run()
+    assert rc == 0    
+    
+    args = []
+    rc = gp_instance_list(common_args + args).run()
+    assert rc == 0       
+
+    args = ["-v"]
+    rc = gp_instance_list(common_args + args).run()
+    assert rc == 0       
+
+    args = [inst_id]
+    rc = gp_instance_list(common_args + args).run()
+    assert rc == 0       
+
+    args = ["-v", inst_id]
+    rc = gp_instance_list(common_args + args).run()
+    assert rc == 0       
+    return
+    args = [inst_id]
+    rc = gp_instance_stop(common_args + args, disable_sigintwatch = True).run()
+    assert rc == 0       
+
+    args = [inst_id]
+    rc = gp_instance_start(common_args + args, disable_sigintwatch = True).run()
+    assert rc == 0       
+
+    args = [inst_id]
+    rc = gp_instance_update(common_args + args, disable_sigintwatch = True).run()
+    assert rc == 0     
+    
+    args = [inst_id]
+    rc = gp_instance_terminate(common_args + args, disable_sigintwatch = True).run()
+    assert rc == 0         
+    
+    remove_instances_dir(instances_dir)
+
+
+def check_instance_state(api, inst_id, state):
+    (status_code, message, topology_json) = api.instance(inst_id)
+    assert status_code == API.STATUS_SUCCESS, message
+    topology = Topology.from_json_string(topology_json)
+    assert topology.state == state
+    
\ No newline at end of file


Property changes on: branches/release-0.93/bin/vm/ec2/lib/python2.7/site-packages/globus_provision-0.3.2-py2.7.egg/globus/provision/tests/test_samples.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.93/bin/vm/futuregrid/plan/test-level1.conf
===================================================================
--- branches/release-0.93/bin/vm/futuregrid/plan/test-level1.conf	                        (rev 0)
+++ branches/release-0.93/bin/vm/futuregrid/plan/test-level1.conf	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,12 @@
+[svc-sierra]
+
+replica_count: env.FUTUREGRID_SIERRA_NODES
+iaas_key: env.FUTUREGRID_IAAS_ACCESS_KEY
+iaas_secret: env.FUTUREGRID_IAAS_SECRET_KEY
+sshkeyname: swiftkey
+localsshkeypath: ~/.ssh/id_rsa.pub
+iaas_url: https://s83r.idp.sdsc.futuregrid.org:8444
+image: debian-lenny.gz
+iaas: nimbus
+ssh_username: root
+

Added: branches/release-0.93/bin/vm/futuregrid/plan/top.conf
===================================================================
--- branches/release-0.93/bin/vm/futuregrid/plan/top.conf	                        (rev 0)
+++ branches/release-0.93/bin/vm/futuregrid/plan/top.conf	2011-12-02 16:38:40 UTC (rev 5330)
@@ -0,0 +1,10 @@
+# This is a sample top level configuration file.  Each entry under runlevels
+# is a file with a single runlevel description.  All of the services in that
+# file are run at the same time but the next level is not begun until 
+# all of these services in the previous successfully complete.
+
+[defaults]
+
+[runlevels]
+level1: test-level1.conf
+

Modified: branches/release-0.93/build.xml
===================================================================
--- branches/release-0.93/build.xml	2011-12-02 16:03:54 UTC (rev 5329)
+++ branches/release-0.93/build.xml	2011-12-02 16:38:40 UTC (rev 5330)
@@ -112,6 +112,14 @@
 				<include name="workers.ranger.sh"/>
 			</fileset>
 		</chmod>
+                <chmod perm="+x">
+              		<fileset dir="${dist.dir}/bin/vm/futuregrid">
+				<include name="install.sh"/>
+                                <include name="env.sh"/>
+                        </fileset>
+                        <fileset dir="${dist.dir}/bin/vm/futuregrid/bin"/>
+            		<fileset dir="${dist.dir}/bin/vm/ec2/bin"/>
+                </chmod>
 		<chmod perm="+x">
 			<fileset dir="${dist.dir}/libexec/log-processing">
 				<include name="active-state-transitions"/>




More information about the Swift-commit mailing list