mirror of
https://github.com/spring-projects/spring-petclinic.git
synced 2025-07-17 21:15:50 +00:00
Merge pull request #1 from yurinnick/fb-dmg-365-webapp-demo-deploymanet
[DMG-365] Add deployment
This commit is contained in:
commit
c6d18b7267
9 changed files with 430 additions and 0 deletions
24
.gitignore
vendored
24
.gitignore
vendored
|
@ -5,3 +5,27 @@ target/*
|
||||||
.idea
|
.idea
|
||||||
*.iml
|
*.iml
|
||||||
/target
|
/target
|
||||||
|
|
||||||
|
*/vendor-cookbooks
|
||||||
|
*.tar.gz
|
||||||
|
|
||||||
|
*~
|
||||||
|
*#
|
||||||
|
.#*
|
||||||
|
\#*#
|
||||||
|
.*.sw[a-z]
|
||||||
|
*.un~
|
||||||
|
pkg/
|
||||||
|
|
||||||
|
# Berkshelf
|
||||||
|
.vagrant
|
||||||
|
Berksfile.lock
|
||||||
|
|
||||||
|
# Bundler
|
||||||
|
Gemfile.lock
|
||||||
|
bin/*
|
||||||
|
.bundle/*
|
||||||
|
|
||||||
|
.coverage/*
|
||||||
|
.kitchen/
|
||||||
|
.kitchen.local.yml
|
||||||
|
|
3
cookbooks/asf-webapp-demo/Berksfile
Normal file
3
cookbooks/asf-webapp-demo/Berksfile
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
source "https://supermarket.getchef.com"
|
||||||
|
|
||||||
|
metadata
|
68
cookbooks/asf-webapp-demo/README.md
Normal file
68
cookbooks/asf-webapp-demo/README.md
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
asf-webapp-demo Cookbook
|
||||||
|
========================
|
||||||
|
TODO: Enter the cookbook description here.
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
This cookbook makes your favorite breakfast sandwich.
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
TODO: List your cookbook requirements. Be sure to include any requirements this cookbook has on platforms, libraries, other cookbooks, packages, operating systems, etc.
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
#### packages
|
||||||
|
- `toaster` - asf-webapp-demo needs toaster to brown your bagel.
|
||||||
|
|
||||||
|
Attributes
|
||||||
|
----------
|
||||||
|
TODO: List your cookbook attributes here.
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
#### asf-webapp-demo::default
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Key</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>Default</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><tt>['asf-webapp-demo']['bacon']</tt></td>
|
||||||
|
<td>Boolean</td>
|
||||||
|
<td>whether to include bacon</td>
|
||||||
|
<td><tt>true</tt></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
#### asf-webapp-demo::default
|
||||||
|
TODO: Write usage instructions for each cookbook.
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
Just include `asf-webapp-demo` in your node's `run_list`:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name":"my_node",
|
||||||
|
"run_list": [
|
||||||
|
"recipe[asf-webapp-demo]"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Contributing
|
||||||
|
------------
|
||||||
|
TODO: (optional) If this is a public cookbook, detail the process for contributing. If this is a private cookbook, remove this section.
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
1. Fork the repository on Github
|
||||||
|
2. Create a named feature branch (like `add_component_x`)
|
||||||
|
3. Write your change
|
||||||
|
4. Write tests for your change (if applicable)
|
||||||
|
5. Run the tests, ensuring they all pass
|
||||||
|
6. Submit a Pull Request using Github
|
||||||
|
|
||||||
|
License and Authors
|
||||||
|
-------------------
|
||||||
|
Authors: TODO: List authors
|
47
cookbooks/asf-webapp-demo/Vagrantfile
vendored
Normal file
47
cookbooks/asf-webapp-demo/Vagrantfile
vendored
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
# -*- mode: ruby -*-
|
||||||
|
# vi: set ft=ruby :
|
||||||
|
|
||||||
|
Vagrant.configure('2') do |config|
|
||||||
|
config.omnibus.chef_version = '11.4.2'
|
||||||
|
config.berkshelf.enabled = true
|
||||||
|
|
||||||
|
config.vm.provider "virtualbox" do |v, override|
|
||||||
|
override.vm.box = 'centos-6.5'
|
||||||
|
override.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_#{override.vm.box}_chef-provisionerless.box"
|
||||||
|
config.vm.hostname = 'cicd-infrastructure'
|
||||||
|
|
||||||
|
config.cache.scope = :box
|
||||||
|
config.cache.auto_detect = true
|
||||||
|
|
||||||
|
v.memory = 1024
|
||||||
|
v.cpus = 2
|
||||||
|
end
|
||||||
|
|
||||||
|
config.vm.provider "aws" do |aws, override|
|
||||||
|
override.vm.box = "aws-dummy"
|
||||||
|
override.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
|
||||||
|
aws.instance_type = "m3.medium"
|
||||||
|
aws.access_key_id = ENV["AWS_ACCESS_KEY"]
|
||||||
|
aws.secret_access_key = ENV["AWS_SECRET_KEY"]
|
||||||
|
aws.keypair_name = "-53b42275e4b0aaf59b4b1459"
|
||||||
|
aws.ami = "ami-52009e3b"
|
||||||
|
aws.security_groups = "default"
|
||||||
|
aws.user_data = "#!/bin/bash
|
||||||
|
echo 'Defaults:ec2-user !requiretty' > \
|
||||||
|
/etc/sudoers.d/999-vagrant-cloud-init-requiretty
|
||||||
|
chmod 440 /etc/sudoers.d/999-vagrant-cloud-init-requiretty
|
||||||
|
mkdir -p /etc/chef/ohai/hints
|
||||||
|
touch /etc/chef/ohai/hints/ec2.json"
|
||||||
|
aws.tags = {
|
||||||
|
'application_name' => 'asf-webapp-demo',
|
||||||
|
}
|
||||||
|
override.ssh.username = "ec2-user"
|
||||||
|
override.ssh.private_key_path = ENV["AWS_SSH_KEY"]
|
||||||
|
end
|
||||||
|
|
||||||
|
config.vm.provision :chef_solo do |chef|
|
||||||
|
chef.run_list = [
|
||||||
|
'recipe[asf-webapp-demo::default]'
|
||||||
|
]
|
||||||
|
end
|
||||||
|
end
|
22
cookbooks/asf-webapp-demo/attributes/default.rb
Normal file
22
cookbooks/asf-webapp-demo/attributes/default.rb
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# Encoding: utf-8
|
||||||
|
#
|
||||||
|
# Cookbook Name:: asf-webapp-demo
|
||||||
|
# Attributes:: default
|
||||||
|
#
|
||||||
|
# Copyright 2014, Copyright (c) 2014 Grid Dynamics International, Inc. All Rights Reserved
|
||||||
|
#
|
||||||
|
# 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['asf-webapp-demo']['url'] = nil
|
||||||
|
default['asf-webapp-demo']['checksum'] = nil
|
94
cookbooks/asf-webapp-demo/chefignore
Normal file
94
cookbooks/asf-webapp-demo/chefignore
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
# Put files/directories that should be ignored in this file when uploading
|
||||||
|
# or sharing to the community site.
|
||||||
|
# Lines that start with '# ' are comments.
|
||||||
|
|
||||||
|
# OS generated files #
|
||||||
|
######################
|
||||||
|
.DS_Store
|
||||||
|
Icon?
|
||||||
|
nohup.out
|
||||||
|
ehthumbs.db
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# SASS #
|
||||||
|
########
|
||||||
|
.sass-cache
|
||||||
|
|
||||||
|
# EDITORS #
|
||||||
|
###########
|
||||||
|
\#*
|
||||||
|
.#*
|
||||||
|
*~
|
||||||
|
*.sw[a-z]
|
||||||
|
*.bak
|
||||||
|
REVISION
|
||||||
|
TAGS*
|
||||||
|
tmtags
|
||||||
|
*_flymake.*
|
||||||
|
*_flymake
|
||||||
|
*.tmproj
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
mkmf.log
|
||||||
|
|
||||||
|
## COMPILED ##
|
||||||
|
##############
|
||||||
|
a.out
|
||||||
|
*.o
|
||||||
|
*.pyc
|
||||||
|
*.so
|
||||||
|
*.com
|
||||||
|
*.class
|
||||||
|
*.dll
|
||||||
|
*.exe
|
||||||
|
*/rdoc/
|
||||||
|
|
||||||
|
# Testing #
|
||||||
|
###########
|
||||||
|
.watchr
|
||||||
|
.rspec
|
||||||
|
spec/*
|
||||||
|
spec/fixtures/*
|
||||||
|
test/*
|
||||||
|
features/*
|
||||||
|
Guardfile
|
||||||
|
Procfile
|
||||||
|
|
||||||
|
# SCM #
|
||||||
|
#######
|
||||||
|
.git
|
||||||
|
*/.git
|
||||||
|
.gitignore
|
||||||
|
.gitmodules
|
||||||
|
.gitconfig
|
||||||
|
.gitattributes
|
||||||
|
.svn
|
||||||
|
*/.bzr/*
|
||||||
|
*/.hg/*
|
||||||
|
*/.svn/*
|
||||||
|
|
||||||
|
# Berkshelf #
|
||||||
|
#############
|
||||||
|
cookbooks/*
|
||||||
|
tmp
|
||||||
|
|
||||||
|
# Cookbooks #
|
||||||
|
#############
|
||||||
|
CONTRIBUTING
|
||||||
|
CHANGELOG*
|
||||||
|
|
||||||
|
# Strainer #
|
||||||
|
############
|
||||||
|
Colanderfile
|
||||||
|
Strainerfile
|
||||||
|
.colander
|
||||||
|
.strainer
|
||||||
|
|
||||||
|
# Vagrant #
|
||||||
|
###########
|
||||||
|
.vagrant
|
||||||
|
Vagrantfile
|
||||||
|
|
||||||
|
# Travis #
|
||||||
|
##########
|
||||||
|
.travis.yml
|
10
cookbooks/asf-webapp-demo/metadata.rb
Normal file
10
cookbooks/asf-webapp-demo/metadata.rb
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# Encoding: utf-8
|
||||||
|
name 'asf-webapp-demo'
|
||||||
|
maintainer 'Copyright (c) 2014 Grid Dynamics International, Inc. All Rights Reserved'
|
||||||
|
maintainer_email 'nyurin@griddynamics.com'
|
||||||
|
license 'Apache 2.0'
|
||||||
|
description 'Installs/Configures asf-webapp-demo'
|
||||||
|
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
|
||||||
|
version '0.1.0'
|
||||||
|
|
||||||
|
depends 'yum-epel'
|
58
cookbooks/asf-webapp-demo/recipes/default.rb
Normal file
58
cookbooks/asf-webapp-demo/recipes/default.rb
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
# Encoding: utf-8
|
||||||
|
#
|
||||||
|
# Cookbook Name:: asf-webapp-demo
|
||||||
|
# Recipe:: default
|
||||||
|
#
|
||||||
|
# Copyright 2014, Copyright (c) 2014 Grid Dynamics International, Inc. All Rights Reserved
|
||||||
|
#
|
||||||
|
# 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 'yum-epel'
|
||||||
|
|
||||||
|
package 'tomcat' do
|
||||||
|
action :install
|
||||||
|
end
|
||||||
|
|
||||||
|
execute 'fix tomcat.conf' do
|
||||||
|
command 'sed \'s/JAVA_HOME=.*/JAVA_HOME=\/usr\/lib\/jvm\/java/\' /etc/tomcat/tomcat.conf'
|
||||||
|
user 'root'
|
||||||
|
action :run
|
||||||
|
end
|
||||||
|
|
||||||
|
service 'tomcat' do
|
||||||
|
supports :status => true, :restart => true, :reload => true
|
||||||
|
action [ :enable, :start ]
|
||||||
|
end
|
||||||
|
|
||||||
|
remote_file '/var/lib/tomcat/webapps/asf-webapp-demo.war' do
|
||||||
|
owner 'tomcat'
|
||||||
|
group 'tomcat'
|
||||||
|
mode 0644
|
||||||
|
source node['asf-webapp-demo']['url']
|
||||||
|
checksum node['asf-webapp-demo']['checksum']
|
||||||
|
notifies :restart, 'service[tomcat]'
|
||||||
|
end
|
||||||
|
|
||||||
|
ruby_block 'waiting for asf-webapp-demo' do
|
||||||
|
block do
|
||||||
|
require 'net/https'
|
||||||
|
require 'uri'
|
||||||
|
uri = URI('http://localhost:8080/asf-webapp-demo')
|
||||||
|
10.times {
|
||||||
|
sleep(30)
|
||||||
|
break if Net::HTTP.get_response(uri) == '302'
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
104
manifests/asf-webapp-demo.yaml
Normal file
104
manifests/asf-webapp-demo.yaml
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
# Encoding: utf-8
|
||||||
|
#
|
||||||
|
# Application: ASF Webapp Demo
|
||||||
|
# Component: Main
|
||||||
|
#
|
||||||
|
# Copyright 2014, Copyright (c) 2014 Grid Dynamics International, Inc. All Rights Reserved
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
application:
|
||||||
|
configuration:
|
||||||
|
input.artifact_url: "http://gd-asf.s3.amazonaws.com/petclinic.war"
|
||||||
|
input.artifact_checksum: "f1c52bc5b995618593855b8718ed0edbc42451a47a1154ba6236bbd2741372d0"
|
||||||
|
input.cookbooks_url: "http://gd-asf.s3.amazonaws.com/webapp_cookbooks.tar.gz"
|
||||||
|
interfaces:
|
||||||
|
input:
|
||||||
|
artifact_url: "bind(workflow#input.artifact_url)"
|
||||||
|
artifact_checksum: "bind(workflow#input.artifact_checksum)"
|
||||||
|
cookbooks_url: "bind(workflow#input.cookbooks_url)"
|
||||||
|
output:
|
||||||
|
webapp_endpoint: "bind(workflow#result.webapp_endpoint)"
|
||||||
|
webapp_host_ip: "bind(workflow#result.webapp_host_ip)"
|
||||||
|
components:
|
||||||
|
workflow:
|
||||||
|
type: workflow.Instance
|
||||||
|
interfaces:
|
||||||
|
input:
|
||||||
|
artifact_url:
|
||||||
|
type: configuration(string)
|
||||||
|
name: Artifact File URL
|
||||||
|
artifact_checksum:
|
||||||
|
type: configuration(string)
|
||||||
|
name: Artifact File Checksum
|
||||||
|
cookbooks_url:
|
||||||
|
type: configuration(string)
|
||||||
|
name: Cookbooks Tarball URL
|
||||||
|
result:
|
||||||
|
webapp_endpoint:
|
||||||
|
type: publish-signal(string)
|
||||||
|
name: Webapp Endpoint
|
||||||
|
webapp_host_ip:
|
||||||
|
type: publish-signal(string)
|
||||||
|
name: Instance IP
|
||||||
|
keypair-store:
|
||||||
|
get-keypair: "send-command(string id => object privateKey)"
|
||||||
|
|
||||||
|
configuration:
|
||||||
|
configuration.triggers: {}
|
||||||
|
configuration.workflows:
|
||||||
|
launch:
|
||||||
|
steps:
|
||||||
|
- start_vm:
|
||||||
|
action: provisionVms
|
||||||
|
parameters:
|
||||||
|
roleName: webapp
|
||||||
|
hardwareId: m1.small
|
||||||
|
quantity: 1
|
||||||
|
retryCount: 1
|
||||||
|
jcloudsProvider: aws-ec2
|
||||||
|
jcloudsEndpoint: https://ec2.us-east-1.amazonaws.com
|
||||||
|
jcloudsRegions: us-east-1
|
||||||
|
jcloudsNodeNamePrefix: asf-webapp-demo
|
||||||
|
vmIdentity: ec2-user
|
||||||
|
imageId: us-east-1/ami-d41689bd
|
||||||
|
ec2SecurityGroup: default
|
||||||
|
providerSettings:
|
||||||
|
userData: "#!/bin/bash\nmkdir -p /etc/chef/ohai/hints\ntouch /etc/chef/ohai/hints/ec2.json"
|
||||||
|
output:
|
||||||
|
webapp_host_ip: ips
|
||||||
|
|
||||||
|
- deploy_webapp:
|
||||||
|
action: chefsolo
|
||||||
|
precedingPhases: [ start_vm ]
|
||||||
|
parameters:
|
||||||
|
roles: [ webapp ]
|
||||||
|
recipeUrl: "{$.cookbooks_url}"
|
||||||
|
runList: [ "recipe[asf-webapp-demo]" ]
|
||||||
|
version: "11.8.2"
|
||||||
|
jattrs:
|
||||||
|
asf-webapp-demo:
|
||||||
|
url: "{$.artifact_url}"
|
||||||
|
checksum: "{$.artifact_checksum}"
|
||||||
|
|
||||||
|
return:
|
||||||
|
webapp_endpoint:
|
||||||
|
value: "http://{$.webapp_host_ip[0]}:8080/asf-webapp-demo"
|
||||||
|
webapp_host_ip:
|
||||||
|
value: "{$.webapp_host_ip[0]}"
|
||||||
|
|
||||||
|
destroy:
|
||||||
|
steps:
|
||||||
|
- destroy:
|
||||||
|
action: undeployEnv
|
Loading…
Reference in a new issue