Skip to content

Commit

Permalink
Merge pull request #31 from preston/master
Browse files Browse the repository at this point in the history
Configuration files for automated provisioning with Vagrant and Chef Solo.
  • Loading branch information
jamesagnew committed Oct 17, 2014
2 parents 287162a + 2959d99 commit e4f212c
Show file tree
Hide file tree
Showing 163 changed files with 11,547 additions and 0 deletions.
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,9 @@
*.log
*.log*
nohup.out
.DS_Store

# Vagrant stuff.
.vagrant
/vagrant/build
/vagrant/chef/tmp
54 changes: 54 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,57 @@ http://fhirtest.uhn.ca/



Creating your own demo server with Vagrant
========
This source code repository includes configuration files to materialize an _entire_ server implementation off all project build artifacts in a single virtual machine (VM) image from scratch, allowing you to quickly bootstrap your own local copy of the project. The server will be completely encapsulated within the created VM image. The process _should_ run on OSX, Linux and Windows, but YMMV. The built-in settings support creation of a *VirtualBox*-based image on Ubuntu Linux, though with tuning of the base image you should be able to create images suitable for other hypervisors and cloud-based IaaS providers such as VMware and Amazon Web Services (AWS), respectively.

Dependencies
----

Prior to running, please ensure you have all .war files built, and the following installed and functioning propertly.

* All normal Java development dependencies. (Java SDK and Maven 3, specifically.)
* VirtualBox
* Vagrant


Creating Your VM
----

cd hapi-fhir-root/
mvn install # Creates web application .war files. Make sure they're built before proceeding!
cd vagrant
vagrant up # Will take a few minutes to boot up.

Your new server environment should now be running in a headless virtual machine on your local computer. The following step are performed automatically for you within the VM sandbox environment:

* A complete Ubuntu 14.04 Server VM is launched in headless mode, bridged to whatever host network interface you've selected.
* An IPv4 address is assigned via DHCP.
* MySQL Server (Community Edition) is installed from the official 10gen repository. (See the [Vagrantfile](https://github.com/preston/hapi-fhir/blob/master/vagrant/Vagrantfile) for the default root password.)
* Oracle Java 8 is installed.
* Tomcat 7 is installed and configured as a system service.
* All compiled *.war applications are deployed automatically and started.
* A "fhir" user is added to tomcat-users.xml. See [fhir.json](https://github.com/preston/hapi-fhir/blob/master/vagrant/chef/data_bags/tomcat_users/fhir.json) for the default password.

Tomcat will now be running on the VM on port 8080 with the management GUI available. For example, you can now visit:

* *Tomcat Manager*: assigned_ip:8080/manager/html
* *HAPI FHIR* JPA Server: assigned_ip:8080/hapi-fhir-jpaserver/

Screenshots
----
![Tomcat Manager](https://raw.githubusercontent.com/preston/hapi-fhir/master/vagrant/screenshots/tomcat.png)

![Demo Server](https://raw.githubusercontent.com/preston/hapi-fhir/master/vagrant/screenshots/hapi-fhir-jpaserver.png)

Advanced Configuration
----
The Vagrant documentation is the best place to start, but a few more commands of note are:

vagrant ssh # Command-line access to the VM.
vagrant destoy # Shuts down and completely destroys the VM.


Credits
----
Vagrant and Chef configuration by Preston Lee <preston.lee@prestonlee.com>
120 changes: 120 additions & 0 deletions vagrant/Vagrantfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# All Vagrant configuration is done here. The most common configuration
# options are documented and commented below. For a complete reference,
# please see the online documentation at vagrantup.com.

# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "ubuntu/trusty64"

# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, host: 8080

# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"

# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
config.vm.network "public_network"

# If true, then any SSH connections made will enable agent forwarding.
# Default value: false
config.ssh.forward_agent = true

# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
config.vm.synced_folder "data", '/data'
config.vm.synced_folder "build", '/build'

# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
config.vm.provider "virtualbox" do |vb|
# # Don't boot with headless mode
# vb.gui = true
#
# # Use VBoxManage to customize the VM. For example to change memory:
vb.customize ["modifyvm", :id, "--memory", "2048"]
end
#
# View the documentation for the provider you're using for more
# information on available options.

# Enable provisioning with chef solo, specifying a cookbooks path, roles
# path, and data_bags path (all relative to this Vagrantfile), and adding
# some recipes and/or roles.
#
config.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = "./chef/cookbooks"
chef.roles_path = "./chef/roles"
chef.data_bags_path = "./chef/data_bags"

chef.add_recipe 'nmap'
chef.add_recipe 'mysql::server'
chef.add_recipe 'mysql::client'
chef.add_recipe 'tomcat'
chef.add_recipe 'tomcat::users' # Currently broken :( https://github.com/opscode-cookbooks/tomcat/pull/79
pw = "MySQLpassword"
chef.json = {
java: {
install_flavor: 'oracle',
jdk_version: 8,
oracle: {
accept_oracle_download_terms: true
}
},
tomcat: {
base_version: 7,
proxy_port: 80,
# ssl_port: 443,
authbind: 'yes'
},
mysql: {
version: '5.6',
server_root_password: pw,
server_debian_password: pw,
server_repl_password: pw,
allow_remote_root: true
}
}
end

require 'fileutils'
build_dir = 'build'
# Remove existing cached artifacts.
Dir.glob(File.join(build_dir, '*.war')).each do |f|
FileUtils.rm(f)
end
# Cache new copies.
Dir.glob(File.join('..', '**', 'target', '*.war')).each do |f|
FileUtils.cp(f, 'build')
end

# puts "Deploying any/all built .war files.""
config.vm.provision 'shell', inline: 'cp /build/*.war /var/lib/tomcat7/webapps'

# puts "Setting MySQL to start automatically at boot, and (re)starting the daemon."
config.vm.provision 'shell', inline: 'update-rc.d mysql defaults'
config.vm.provision 'shell', inline: 'service mysql restart'

# puts "The VM network interfaces are configured as follows..."
config.vm.provision 'shell', inline: 'ifconfig'

end
Empty file added vagrant/build/.gitkeep
Empty file.
10 changes: 10 additions & 0 deletions vagrant/chef/Cheffile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/usr/bin/env ruby
#^syntax detection

site 'https://supermarket.getchef.com/api/v1'

# cookbook 'emacs24-nox'
cookbook 'nmap'
cookbook 'java'
cookbook 'mysql'
cookbook 'tomcat'
23 changes: 23 additions & 0 deletions vagrant/chef/Cheffile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
SITE
remote: https://supermarket.getchef.com/api/v1
specs:
chef-sugar (2.3.0)
java (1.28.0)
mysql (5.5.3)
yum-mysql-community (>= 0.0.0)
nmap (0.1.0)
openssl (2.0.0)
chef-sugar (>= 0.0.0)
tomcat (0.16.2)
java (>= 0.0.0)
openssl (>= 0.0.0)
yum (3.3.2)
yum-mysql-community (0.1.10)
yum (>= 3.0)

DEPENDENCIES
java (>= 0)
mysql (>= 0)
nmap (>= 0)
tomcat (>= 0)

92 changes: 92 additions & 0 deletions vagrant/chef/cookbooks/chef-sugar/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
Chef Sugar Changelog
=========================
This file is used to list changes made in each version of the chef-sugar cookbook and gem.

v2.3.0 (2014-09-24)
-------------------
### Improvements
- Add `vmware?` matcher
- Allow the attribute DSL to access parent attributes

### Bug Fixes
- Return `true` or `false` from all Boolean methods (instead of `nil` or truthy values)

v2.2.0 (2014-08-20)
-------------------
### Improvements
- Add `smartos?` matcher
- Add `omnios?` matcher

v2.1.0 (2014-06-26)
-------------------
### Improvements
- Add `solaris2?` matcher
- Add `aix?` matcher
- Add 'lxc?' matcher

### Bug Fixes
- Fix a bug in namespace memoization during attribute initialization

v2.0.0 (2014-06-16)
-------------------
### Breaking
- Remove `not_linux?` method
- Remove `not_windows?` method

### Improvements
- Miscellaneous spelling fixes
- Update a failing unit test for `installed?`
- Add Mac OS X to the list of platforms (Yosemite)
- Upgrade to RSpec 3
- Fix `which` (and `installed?` and `installed_at_version?`) when given an absolute path
- Fix `linux?` check to only return true on real linuxes

v1.3.0 (2014-05-05)
-------------------
- Check both `$stdout` and `$stderr` in `version_for`
- Add additional platform versions
- Make `includes_recipe?` a top-level API (instead of just Node)
- Match on the highest version number instead of direct equality checking on platform versions
- Define `Object#blank?` as a core extension
- Define `String#flush` as a core extension
- Remove Stove

v1.2.6 (2014-03-16)
-------------------
- Fix a bug in `vagrant?` returning false on newer Vagrant versions
- Remove Coveralls

v1.2.4 (2014-03-13)
-------------------
- See (1.2.2), but I botched the release

v1.2.2 (2014-03-13)
-------------------
- Fix a critical bug with `encrypted_data_bag_item` using the wrong key

v1.2.0 (2014-03-09)
-------------------
- Add `namespace` functionality for specifying attributes in a DSL
- Add constraints helpers for comparing version strings
- Add `require_chef_gem` to safely require and degrade if a gem is not installed
- Add `deep_fetch` and `deep_fetch!` to fetch deeply nested keys
- Accept an optional secret key in `encrypted_data_bag_item` helper and raise a helpful error if one is not set (NOTE: this changes the airity of the method, but it's backward-compatible because Ruby is magic)
- Add Stove for releasing
- Updated copyrights for 2014

v1.1.0 (2013-12-10)
-------------------
- Add `cloudstack?` helper
- Add data bag helpers
- Remove foodcritic checks
- Upgrade development gem versions
- Randomize spec order

v1.0.1 (2013-10-15)
-------------------
- Add development recipe
- Add `compile_time`, `before`, and `after` filters

v1.0.0 (2013-10-15)
-------------------
- First public release
Loading

0 comments on commit e4f212c

Please sign in to comment.