stack_car 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 15fc1295913f9fa37955ae53b4581512397fb63e
4
- data.tar.gz: 110fdd77dcc395f16eeceabc2a83045c94adbd5e
3
+ metadata.gz: f9d04628829fcc7fc074d53702f0e4f6acad9932
4
+ data.tar.gz: c0d4c2c775f285b1ec6286ee97f953f8a6378838
5
5
  SHA512:
6
- metadata.gz: 038f4cf8fee35f513b72ade75601cd9b8475c5057ce9690a3cdda3a9ed4845ef80e4b7366caf325532e7e2fa424986a50ad838f2d70ac0dbc003fa48fcbb412f
7
- data.tar.gz: 836ce88401f9f4e136158648e247f1be6094cc639b5dbdf7267ecae456b6d582c747b8a0862ebda0a16ecaf09bd423d5ad110d9d5cc52e5a4f0720a3181ed5e1
6
+ metadata.gz: ec12a14454db553476d6e1dd12db5ec5582484798a9a685e23542c0f7de4d678c69a53e2046c1b1f76245ee5c080159b929fdea11457257f4690a04ea9f6ddb4
7
+ data.tar.gz: 26e0b108b5fb96fec106e2210986977c01a4fe30dcef258e3421dfe97a23cc5ad232b502a951ef8208d15a10b764f4ad540eb4c11fb6b6f9a1aea16545d664d3
data/lib/stack_car/cli.rb CHANGED
@@ -1,9 +1,15 @@
1
1
  require 'thor'
2
2
  require 'erb'
3
+ require 'dotenv/load'
4
+
3
5
  module StackCar
4
6
  class HammerOfTheGods < Thor
5
7
  include Thor::Actions
6
8
 
9
+ def self.source_root
10
+ File.join(File.dirname(__FILE__), '..', '..', 'templates')
11
+ end
12
+
7
13
  method_option :service, default: 'web', type: :string, aliases: '-s'
8
14
  desc "up", "starts docker-compose with rebuild and orphan removal, defaults to web"
9
15
  def up
@@ -43,12 +49,34 @@ module StackCar
43
49
  end
44
50
  map rc: :console
45
51
 
52
+ desc "release ENVIRONTMENT", "tag and push and image to the registry"
53
+ def release(environment)
54
+ registry = "ENV['REGISTRY_HOST']ENV['REGISTRY_URI']"
55
+ run("docker login #{ENV['REGISTRY_HOST']}")
56
+ run("docker tag #{registry} #{registry}:#{environment}-#{Time.now.strftime("%Y%m%d%I%M%S")}")
57
+ run("docker push #{registry}:#{environment}-#{Time.now.strftime("%Y%m%d%I%M%S")}")
58
+ run("docker tag #{registry} #{registry}:#{environment}-latest")
59
+ run("docker push #{registry}:#{environment}-latest")
60
+ end
61
+
62
+ desc "provision ENVIRONMENT", "configure the servers for docker and then deploy an image"
63
+ def provision(environment)
64
+ run("cd ops && ansible-playbook -i hosts #{environment} provision.yml")
65
+ end
66
+
67
+ desc "deploy ENVIRONMENT", "deploy an image from the registry"
68
+ def deploy(environment)
69
+ run("cd ops && ansible-playbook -i hosts #{environment} deploy.yml")
70
+ end
71
+
46
72
  method_option :elasticsearch, default: false, type: :boolean, aliases: '-e'
47
73
  method_option :solr, default: false, type: :boolean, aliases: '-s'
48
74
  method_option :postgres, default: false, type: :boolean, aliases: '-p'
49
75
  method_option :mysql, default: false, type: :boolean, aliases: '-m'
50
76
  method_option :redis, default: false, type: :boolean, aliases: '-r'
51
77
  method_option :fcrepo, default: false, type: :boolean, aliases: '-f'
78
+ method_option :deploy, default: false, type: :boolean, aliases: '-d'
79
+ method_option :rancher, default: false, type: :boolean, aliases: '-dr'
52
80
  method_option :sidekiq, default: false, type: :boolean, aliases: '-sq' # TODO
53
81
  method_option :mongodb, default: false, type: :boolean, aliases: '-mg' # TODO
54
82
  desc 'dockerize DIR', 'Will copy the docker tempates in to your project, see options for supported dependencies'
@@ -61,21 +89,28 @@ module StackCar
61
89
  def dockerize(dir=nil)
62
90
  if dir
63
91
  Dir.chdir(dir)
92
+ else
93
+ dir = '.'
64
94
  end
65
- project_name = File.basename(File.expand_path(dir))
66
- db_libs = []
67
- db_libs << "libpq-dev postgresql-client" if options[:postgres]
68
- db_libs << "mysql-client" if options[:mysql]
69
- db_libs << "libc6-dev libreoffice imagemagick unzip" if options[:fcrepo]
70
- db_libs = db_libs.join(' ')
71
-
72
- template_path = File.join(File.dirname(__FILE__), '..', '..', 'templates')
73
- ['.dockerignore', 'Dockerfile', 'docker-compose.yml', 'docker-compose-prod.yml', '.gitlab-ci.yml', '.env'].each do |template|
74
-
75
- renderer = ERB.new(File.read(File.join(template_path, template + '.erb')), 0, '-')
76
- File.write(template, renderer.result(binding))
95
+ @project_name = File.basename(File.expand_path(dir))
96
+ @db_libs = []
97
+ @db_libs << "libpq-dev postgresql-client" if options[:postgres]
98
+ @db_libs << "mysql-client" if options[:mysql]
99
+ @db_libs << "libc6-dev libreoffice imagemagick unzip" if options[:fcrepo]
100
+ @db_libs = @db_libs.join(' ')
101
+
102
+
103
+ ['.dockerignore', 'Dockerfile', 'docker-compose.yml', 'docker-compose-prod.yml', '.gitlab-ci.yml', '.env'].each do |template_file|
104
+ template("#{template_file}.erb", template_file)
77
105
  end
78
- end
79
106
 
107
+ if options[:deploy] || options[:rancher]
108
+ directory('ops')
109
+ ['hosts'].each do |template_file|
110
+ template("#{template_file}.erb", "ops/#{template_file}")
111
+ end
112
+ say 'Please update ops/hosts with the correct server addresses'
113
+ end
114
+ end
80
115
  end
81
116
  end
@@ -1,3 +1,3 @@
1
1
  module StackCar
2
- VERSION = "0.1.9"
2
+ VERSION = "0.2.0"
3
3
  end
data/logo.jpg ADDED
Binary file
data/stack_car.gemspec CHANGED
@@ -24,5 +24,6 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "rspec", "~> 3.0"
25
25
  spec.add_development_dependency "yard"
26
26
  spec.add_development_dependency "yard-thor"
27
+ spec.add_dependency 'dotenv'
27
28
  spec.add_dependency 'thor'
28
29
  end
data/templates/.env.erb CHANGED
@@ -1,9 +1,13 @@
1
1
  <% if options[:postgres] -%>
2
- POSTGRES_DB=<%= project_name %>
2
+ POSTGRES_DB=<%= @project_name %>
3
3
  POSTGRES_USER=postgres
4
4
  POSTGRES_PASSWORD=DatabaseFTW
5
5
  <% end -%>
6
6
  <% if options[:mysql] -%>
7
- MYSQL_DATABASE=<%= project_name %>
7
+ MYSQL_DATABASE=<%= @project_name %>
8
8
  MYSQL_ROOT_PASSWORD=DatabaseFTW
9
9
  <% end -%>
10
+ <% if options[:deploy] || options[:rancher] -%>
11
+ REGISTRY_HOST=registry.gitlab.com
12
+ REGISTRY_URI /TODO/<%= @project_name %>
13
+ <% end -%>
@@ -1,6 +1,6 @@
1
1
  FROM ruby:2.3.0
2
2
 
3
- RUN apt-get update -qq && apt-get install -y build-essential nodejs pv libsasl2-dev <%= db_libs %> && \
3
+ RUN apt-get update -qq && apt-get install -y build-essential nodejs pv libsasl2-dev <%= @db_libs %> && \
4
4
  apt-get clean && \
5
5
  rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
6
6
 
@@ -23,3 +23,5 @@ ENV BUNDLE_GEMFILE=$APP_HOME/Gemfile \
23
23
 
24
24
  ADD Gemfile* $APP_HOME/
25
25
  RUN bundle install
26
+
27
+ COPY . $APP_HOME
@@ -1,13 +1,11 @@
1
1
  version: '2'
2
2
  services:
3
3
  web:
4
- image: <%= project_name %>:latest
5
- command: bundle exec rails s -p 3000 -b '0.0.0.0'
4
+ image: <%= @project_name %>:latest
5
+ command: bundle exec rake assets:precompile && bundle exec rails s -p 3000 -b '0.0.0.0'
6
6
  environment:
7
7
  - RAILS_ENV=production
8
8
  - RACK_ENV=production
9
9
  restart: unless-stopped
10
10
  ports:
11
11
  - "3000:3000"
12
- volumes:
13
- - .:/app
@@ -61,7 +61,7 @@ services:
61
61
  <% end -%>
62
62
  web:
63
63
  build: .
64
- image: <%= project_name %>:latest
64
+ image: <%= @project_name %>:latest
65
65
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
66
66
  volumes:
67
67
  - .:/app
@@ -0,0 +1,20 @@
1
+ [staging]
2
+ XX.XXX.XXX.XXX ansible_user=centos
3
+
4
+ [production]
5
+ XX.XXX.XXX.XXX ansible_user=ubuntu
6
+
7
+ [servers:children]
8
+ staging
9
+ production
10
+
11
+ [servers:vars]
12
+ registry_host=registry.gitlab.com
13
+ compose_dir=/var/www
14
+ project_name=<%= @project_name %>
15
+
16
+ [staging:vars]
17
+ tag=staging-latest
18
+
19
+ [production:vars]
20
+ tag=production-latest
@@ -0,0 +1,49 @@
1
+ ---
2
+ - name: Deploy
3
+ hosts: all
4
+ become: true
5
+ vars_prompt:
6
+ - name: "registry_user"
7
+ prompt: "What is your registry email?"
8
+ - name: "registry_password"
9
+ prompt: "What is your registry password?"
10
+
11
+ tasks:
12
+ - file:
13
+ path: "{{ compose_dir }}"
14
+ state: directory
15
+
16
+ - name: Upload docker-compose files
17
+ synchronize:
18
+ src: ../docker-compose-prod.yml
19
+ dest: "{{ compose_dir }}/{{ project_name }}.yml"
20
+
21
+ - name: Login to registry
22
+ docker_login:
23
+ registry: "{{ registry_host }}"
24
+ username: "{{ registry_user }}"
25
+ password: "{{ registry_password }}"
26
+ register: authout
27
+
28
+ - debug: var=authout
29
+
30
+ - name: Restart service
31
+ command: "cd {{ compose_dir }} && docker-compose -f {{ project_name }}.yml pull web && docker-compose -f {{ project_name }}.yml up -d web"
32
+ environment:
33
+ TAG: "{{ tag }}"
34
+ register: output
35
+ # TODO - ansible docker-service doesn't work with custom registery right now
36
+ # - name: Restart service
37
+ # docker_service:
38
+ # project_name: "{{ project_name }}"
39
+ # project_src: "{{ compose_dir }}"
40
+ # files:
41
+ # - "{{ project_name }}.yml"
42
+ # pull: yes
43
+ # services: web
44
+ # debug: yes
45
+ # environment:
46
+ # TAG: "{{ tag }}"
47
+ # register: output
48
+ #
49
+ - debug: var=output
@@ -0,0 +1,17 @@
1
+ ---
2
+ - name: Set up Docker on host
3
+ hosts: all
4
+ become: true
5
+ roles:
6
+ - docker
7
+ tasks:
8
+ - name: Install Compose Module
9
+ pip: name=docker-compose
10
+ - name: Upload docker-compose files
11
+ synchronize:
12
+ src: ../.env
13
+ dest: "{{ compose_dir }}/{{ project_name }}_env"
14
+
15
+
16
+
17
+ - include: deploy.yml
@@ -0,0 +1,27 @@
1
+ # Docker Installation - Ansible Role
2
+ Install [Docker](http://docker.com) on CentOS and Red Hat hosts. Used to make sure that docker is installed
3
+ and running to enable the use of [Ansible's docker module](http://docs.ansible.com/docker_module.html)
4
+
5
+ ### Installation
6
+ Add this repository as a submodule of your git with:
7
+
8
+ ```
9
+ git submodule add git@github.com:Vinelab/ansible-docker roles/docker
10
+ ```
11
+
12
+ Or simply clone this repository directly into your *roles* directory:
13
+
14
+ ```
15
+ git clone git@github.com:Vinelab/ansible-docker roles/docker
16
+ ```
17
+
18
+ ### Usage
19
+
20
+ ```yaml
21
+ - hosts: all
22
+ - roles:
23
+ - docker
24
+ ```
25
+
26
+ #### Tags
27
+ All tasks have the tag `docker`
@@ -0,0 +1,20 @@
1
+ ---
2
+ - name: Install python setup tools
3
+ yum: name=python-setuptools
4
+ tags: docker
5
+
6
+ - name: Install Pypi
7
+ easy_install: name=pip
8
+ tags: docker
9
+
10
+ - name: Install docker-py
11
+ pip: name=docker-py
12
+ tags: docker
13
+
14
+ - name: Install Docker
15
+ yum: name=docker state=latest
16
+ tags: docker
17
+
18
+ - name: Make sure Docker is running
19
+ service: name=docker state=running
20
+ tags: docker
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stack_car
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Kaufman
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-01-12 00:00:00.000000000 Z
11
+ date: 2017-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: dotenv
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: thor
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -117,6 +131,7 @@ files:
117
131
  - lib/stack_car.rb
118
132
  - lib/stack_car/cli.rb
119
133
  - lib/stack_car/version.rb
134
+ - logo.jpg
120
135
  - public/.gitkeep
121
136
  - public/logo.jpg
122
137
  - public/logo.pxm
@@ -127,6 +142,11 @@ files:
127
142
  - templates/Dockerfile.erb
128
143
  - templates/docker-compose-prod.yml.erb
129
144
  - templates/docker-compose.yml.erb
145
+ - templates/hosts.erb
146
+ - templates/ops/deploy.yml
147
+ - templates/ops/provision.yml
148
+ - templates/ops/roles/docker/README.md
149
+ - templates/ops/roles/docker/tasks/main.yml
130
150
  homepage: https://gitlab.com/notch8/stack_car
131
151
  licenses: []
132
152
  metadata: {}