opsworks-cli 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/LICENSE.md +22 -0
- data/README.md +53 -0
- data/Rakefile +4 -0
- data/bin/opsworks +10 -0
- data/lib/opsworks/app.rb +31 -0
- data/lib/opsworks/cli/agent.rb +32 -0
- data/lib/opsworks/cli/helpers/keychain.rb +25 -0
- data/lib/opsworks/cli/helpers/options.rb +17 -0
- data/lib/opsworks/cli/subcommands/deploy.rb +27 -0
- data/lib/opsworks/cli/subcommands/exec.rb +26 -0
- data/lib/opsworks/cli/subcommands/status.rb +43 -0
- data/lib/opsworks/cli/subcommands/update.rb +31 -0
- data/lib/opsworks/cli/version.rb +5 -0
- data/lib/opsworks/cli.rb +7 -0
- data/lib/opsworks/deployment.rb +17 -0
- data/lib/opsworks/resource.rb +17 -0
- data/lib/opsworks/stack.rb +58 -0
- data/opsworks-cli.gemspec +31 -0
- data/spec/opsworks/cli/agent_spec.rb +13 -0
- data/spec/spec_helper.rb +10 -0
- metadata +182 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3dce3800bcff9f369454aab457becf9716146ad9
|
4
|
+
data.tar.gz: 76c70f6e2ef658083f9643ada130827ba584878a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 507226df1efe63108f37d6f202389b1d429d1df580ce80f72b1a39ffffa9794641872ce8d2dca1b594f46ba9d4d96240500fb7343fd3bcb1bf5248cf7ddf0319
|
7
|
+
data.tar.gz: 818cf0dc76e545f5a754792131ef02acd9526bfb97d7331524f05f52ada266cc3fd17465df5ecbbc582c7dfbde194d753a96ea492f3c71672cf1efa0baf54d83
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Aptible, Inc.
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# ![](https://raw.github.com/aptible/straptible/master/lib/straptible/rails/templates/public.api/icon-60px.png) OpsWorks::CLI
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/opsworks-cli.png)](https://rubygems.org/gems/opsworks-cli)
|
4
|
+
[![Build Status](https://travis-ci.org/aptible/opsworks-cli.png?branch=master)](https://travis-ci.org/aptible/opsworks-cli)
|
5
|
+
[![Dependency Status](https://gemnasium.com/aptible/opsworks-cli.png)](https://gemnasium.com/aptible/opsworks-cli)
|
6
|
+
|
7
|
+
An alternative CLI for Amazon OpsWorks, focused on managing a large number of similarly provisioned stacks.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Install the gem:
|
12
|
+
|
13
|
+
gem install 'opsworks-cli'
|
14
|
+
|
15
|
+
## Configuration
|
16
|
+
|
17
|
+
The gem expects to have access to your AWS access key ID and secret access key. You can configure this in either of two ways. First, you may set the following environment variables:
|
18
|
+
|
19
|
+
export AWS_ACCESS_KEY_ID=...
|
20
|
+
export AWS_SECRET_ACCESS_KEY=...
|
21
|
+
|
22
|
+
If you're on OS X, you may also use the [aws-keychain-util](https://github.com/zwily/aws-keychain-util) to password-protect these credentials within the OS X Keychain. To do this, follow the instructions in the gem's README:
|
23
|
+
|
24
|
+
gem install aws-keychain-util
|
25
|
+
aws-creds init
|
26
|
+
aws-creds add
|
27
|
+
|
28
|
+
When you add credentials, make sure to name the account `default`.
|
29
|
+
|
30
|
+
## Usage
|
31
|
+
|
32
|
+
```
|
33
|
+
$ opsworks help
|
34
|
+
Commands:
|
35
|
+
opsworks deploy [--stack STACK] APP # Deploy an OpsWorks app
|
36
|
+
opsworks exec [--stack STACK] RECIPE # Execute a Chef recipe
|
37
|
+
opsworks status [--stack STACK] APP # Display the most recent deployment of an app
|
38
|
+
opsworks update [--stack STACK] # Update OpsWorks custom cookbooks
|
39
|
+
opsworks version # Print OpsWorks CLI version
|
40
|
+
```
|
41
|
+
|
42
|
+
## Contributing
|
43
|
+
|
44
|
+
1. Fork the project.
|
45
|
+
1. Commit your changes, with specs.
|
46
|
+
1. Ensure that your code passes specs (`rake spec`) and meets Aptible's Ruby style guide (`rake rubocop`).
|
47
|
+
1. Create a new pull request on GitHub.
|
48
|
+
|
49
|
+
## Copyright and License
|
50
|
+
|
51
|
+
MIT License, see [LICENSE](LICENSE.md) for details.
|
52
|
+
|
53
|
+
Copyright (c) 2014 [Aptible](https://www.aptible.com), Frank Macreery, and contributors.
|
data/Rakefile
ADDED
data/bin/opsworks
ADDED
data/lib/opsworks/app.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative 'resource'
|
2
|
+
require_relative 'deployment'
|
3
|
+
|
4
|
+
module OpsWorks
|
5
|
+
class App < Resource
|
6
|
+
attr_accessor :id, :name
|
7
|
+
|
8
|
+
def deployments
|
9
|
+
@deployments ||= initialize_deployments
|
10
|
+
@deployments || []
|
11
|
+
end
|
12
|
+
|
13
|
+
def last_deployment
|
14
|
+
deployments.find(&:success?)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def initialize_deployments
|
20
|
+
return nil unless id
|
21
|
+
response = self.class.client.describe_deployments(app_id: id)
|
22
|
+
response.data[:deployments].map do |hash|
|
23
|
+
Deployment.new(
|
24
|
+
id: hash[:deployment_id],
|
25
|
+
created_at: hash[:created_at],
|
26
|
+
status: hash[:status]
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'aws'
|
3
|
+
|
4
|
+
require_relative 'helpers/keychain'
|
5
|
+
require_relative 'helpers/options'
|
6
|
+
|
7
|
+
require_relative 'subcommands/update'
|
8
|
+
require_relative 'subcommands/exec'
|
9
|
+
require_relative 'subcommands/deploy'
|
10
|
+
require_relative 'subcommands/status'
|
11
|
+
|
12
|
+
require 'opsworks/stack'
|
13
|
+
require 'opsworks/app'
|
14
|
+
require 'opsworks/deployment'
|
15
|
+
|
16
|
+
module OpsWorks
|
17
|
+
module CLI
|
18
|
+
class Agent < Thor
|
19
|
+
include Thor::Actions
|
20
|
+
|
21
|
+
include Subcommands::Update
|
22
|
+
include Subcommands::Exec
|
23
|
+
include Subcommands::Deploy
|
24
|
+
include Subcommands::Status
|
25
|
+
|
26
|
+
desc 'version', 'Print OpsWorks CLI version'
|
27
|
+
def version
|
28
|
+
puts "opsworks-cli v#{OpsWorks::CLI::VERSION}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module OpsWorks
|
2
|
+
module CLI
|
3
|
+
module Helpers
|
4
|
+
module Keychain
|
5
|
+
KEYCHAIN = 'aws'
|
6
|
+
|
7
|
+
def fetch_keychain_credentials(account = 'default')
|
8
|
+
require 'aws-keychain-util/credential_provider'
|
9
|
+
|
10
|
+
provider = AwsKeychainUtil::CredentialProvider.new(
|
11
|
+
account, KEYCHAIN
|
12
|
+
)
|
13
|
+
AWS.config(credential_provider: provider) if provider.set?
|
14
|
+
rescue LoadError
|
15
|
+
# Keychain utility is optional and only relevant on OS X
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def env_credentials?
|
20
|
+
!!(ENV['AWS_ACCESS_KEY_ID'] && ENV['AWS_SECRET_ACCESS_KEY'])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'opsworks/stack'
|
2
|
+
|
3
|
+
module OpsWorks
|
4
|
+
module CLI
|
5
|
+
module Helpers
|
6
|
+
module Options
|
7
|
+
def parse_stacks(options = {})
|
8
|
+
stacks = OpsWorks::Stack.all
|
9
|
+
if options[:stack]
|
10
|
+
stacks.select! { |stack| stack.name == options[:stack] }
|
11
|
+
end
|
12
|
+
stacks
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module OpsWorks
|
2
|
+
module CLI
|
3
|
+
module Subcommands
|
4
|
+
module Deploy
|
5
|
+
# rubocop:disable MethodLength
|
6
|
+
# rubocop:disable CyclomaticComplexity
|
7
|
+
def self.included(thor)
|
8
|
+
thor.class_eval do
|
9
|
+
desc 'deploy [--stack STACK] APP', 'Deploy an OpsWorks app'
|
10
|
+
option :stack
|
11
|
+
def deploy(name)
|
12
|
+
fetch_keychain_credentials unless env_credentials?
|
13
|
+
stacks = parse_stacks(options)
|
14
|
+
stacks.each do |stack|
|
15
|
+
next unless (app = stack.find_app_by_name(name))
|
16
|
+
say "Deploying to #{stack.name}..."
|
17
|
+
stack.deploy_app(app)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
# rubocop:enable CyclomaticComplexity
|
23
|
+
# rubocop:enable MethodLength
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module OpsWorks
|
2
|
+
module CLI
|
3
|
+
module Subcommands
|
4
|
+
module Exec
|
5
|
+
# rubocop:disable MethodLength
|
6
|
+
# rubocop:disable CyclomaticComplexity
|
7
|
+
def self.included(thor)
|
8
|
+
thor.class_eval do
|
9
|
+
desc 'exec [--stack STACK] RECIPE', 'Execute a Chef recipe'
|
10
|
+
option :stack
|
11
|
+
def exec(recipe)
|
12
|
+
fetch_keychain_credentials unless env_credentials?
|
13
|
+
stacks = parse_stacks(options)
|
14
|
+
stacks.each do |stack|
|
15
|
+
say "Executing recipe on #{stack.name}..."
|
16
|
+
stack.execute_recipe(recipe)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
# rubocop:enable CyclomaticComplexity
|
22
|
+
# rubocop:enable MethodLength
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module OpsWorks
|
2
|
+
module CLI
|
3
|
+
module Subcommands
|
4
|
+
module Status
|
5
|
+
# rubocop:disable MethodLength
|
6
|
+
# rubocop:disable CyclomaticComplexity
|
7
|
+
def self.included(thor)
|
8
|
+
thor.class_eval do
|
9
|
+
include Helpers::Keychain
|
10
|
+
include Helpers::Options
|
11
|
+
|
12
|
+
desc 'status [--stack STACK] APP',
|
13
|
+
'Display the most recent deployment of an app'
|
14
|
+
option :stack
|
15
|
+
def status(name)
|
16
|
+
fetch_keychain_credentials unless env_credentials?
|
17
|
+
|
18
|
+
table = parse_stacks(options).map do |stack|
|
19
|
+
next unless (app = stack.find_app_by_name(name))
|
20
|
+
if (deployment = app.last_deployment)
|
21
|
+
deployed_at = formatted_time(deployment.created_at)
|
22
|
+
else
|
23
|
+
deployed_at = '-'
|
24
|
+
end
|
25
|
+
[stack.name, name, deployed_at]
|
26
|
+
end
|
27
|
+
table.compact!
|
28
|
+
print_table table
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def formatted_time(timestamp)
|
34
|
+
timestamp.strftime('%Y-%m-%d %H:%M:%S %Z')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
# rubocop:enable CyclomaticComplexity
|
39
|
+
# rubocop:enable MethodLength
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'aws'
|
2
|
+
|
3
|
+
module OpsWorks
|
4
|
+
module CLI
|
5
|
+
module Subcommands
|
6
|
+
module Update
|
7
|
+
# rubocop:disable MethodLength
|
8
|
+
# rubocop:disable CyclomaticComplexity
|
9
|
+
def self.included(thor)
|
10
|
+
thor.class_eval do
|
11
|
+
include Helpers::Keychain
|
12
|
+
include Helpers::Options
|
13
|
+
|
14
|
+
desc 'update [--stack STACK]', 'Update OpsWorks custom cookbooks'
|
15
|
+
option :stack
|
16
|
+
def update
|
17
|
+
fetch_keychain_credentials unless env_credentials?
|
18
|
+
stacks = parse_stacks(options)
|
19
|
+
stacks.each do |stack|
|
20
|
+
say "Updating #{stack.name}..."
|
21
|
+
stack.update_custom_cookbooks
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
# rubocop:enable CyclomaticComplexity
|
27
|
+
# rubocop:enable MethodLength
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/opsworks/cli.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative 'resource'
|
2
|
+
|
3
|
+
module OpsWorks
|
4
|
+
class Deployment < Resource
|
5
|
+
attr_accessor :id, :status, :created_at
|
6
|
+
|
7
|
+
def success?
|
8
|
+
status == 'successful'
|
9
|
+
end
|
10
|
+
|
11
|
+
def created_at
|
12
|
+
Time.parse(@created_at)
|
13
|
+
rescue
|
14
|
+
@created_at
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module OpsWorks
|
2
|
+
class Resource
|
3
|
+
def initialize(options = {})
|
4
|
+
options.each do |key, value|
|
5
|
+
send("#{key}=", value) if respond_to?("#{key}=")
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.client
|
10
|
+
@client ||= AWS::OpsWorks::Client.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.account
|
14
|
+
ENV['ACCOUNT'] || @account || 'opsworks-cli'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require_relative 'resource'
|
2
|
+
require_relative 'app'
|
3
|
+
|
4
|
+
module OpsWorks
|
5
|
+
class Stack < Resource
|
6
|
+
attr_accessor :id, :name
|
7
|
+
|
8
|
+
def self.all
|
9
|
+
client.describe_stacks.data[:stacks].map do |hash|
|
10
|
+
new(id: hash[:stack_id], name: hash[:name])
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.find_by_name(name)
|
15
|
+
all.find { |stack| stack.name == name }
|
16
|
+
end
|
17
|
+
|
18
|
+
def apps
|
19
|
+
@apps ||= initialize_apps
|
20
|
+
@apps || []
|
21
|
+
end
|
22
|
+
|
23
|
+
def find_app_by_name(name)
|
24
|
+
apps.find { |app| app.name == name }
|
25
|
+
end
|
26
|
+
|
27
|
+
def update_custom_cookbooks
|
28
|
+
create_deployment(command: { name: 'update_custom_cookbooks' })
|
29
|
+
end
|
30
|
+
|
31
|
+
def execute_recipe(recipe)
|
32
|
+
create_deployment(
|
33
|
+
command: {
|
34
|
+
name: 'execute_recipes',
|
35
|
+
args: { 'recipes' => [recipe] }
|
36
|
+
}
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
def deploy_app(app)
|
41
|
+
fail 'App not found' unless app && app.id
|
42
|
+
create_deployment(app_id: app.id, command: { name: 'deploy' })
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def initialize_apps
|
48
|
+
return nil unless id
|
49
|
+
self.class.client.describe_apps(stack_id: id).data[:apps].map do |hash|
|
50
|
+
App.new(id: hash[:app_id], name: hash[:name])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def create_deployment(options = {})
|
55
|
+
self.class.client.create_deployment(options.merge(stack_id: id))
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
require 'English'
|
6
|
+
require 'opsworks/cli/version'
|
7
|
+
|
8
|
+
Gem::Specification.new do |spec|
|
9
|
+
spec.name = 'opsworks-cli'
|
10
|
+
spec.version = OpsWorks::CLI::VERSION
|
11
|
+
spec.authors = ['Frank Macreery']
|
12
|
+
spec.email = ['frank@macreery.com']
|
13
|
+
spec.description = %q(OpsWorks CLI)
|
14
|
+
spec.summary = %q(Alternative CLI for Amazon OpsWorks)
|
15
|
+
spec.homepage = 'https://github.com/aptible/opsworks-cli'
|
16
|
+
spec.license = 'MIT'
|
17
|
+
|
18
|
+
spec.files = `git ls-files`.split($RS)
|
19
|
+
spec.test_files = spec.files.grep(/^spec\//)
|
20
|
+
spec.require_paths = ['lib']
|
21
|
+
|
22
|
+
spec.add_dependency 'thor'
|
23
|
+
spec.add_dependency 'aws-sdk'
|
24
|
+
|
25
|
+
spec.add_development_dependency 'aws-keychain-util'
|
26
|
+
spec.add_development_dependency 'bundler', '~> 1.5'
|
27
|
+
spec.add_development_dependency 'aptible-tasks'
|
28
|
+
spec.add_development_dependency 'rake'
|
29
|
+
spec.add_development_dependency 'rspec', '~> 2.0'
|
30
|
+
spec.add_development_dependency 'pry'
|
31
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OpsWorks::CLI::Agent do
|
4
|
+
before { subject.stub(:ask) }
|
5
|
+
|
6
|
+
describe '#version' do
|
7
|
+
it 'should print the version' do
|
8
|
+
version = OpsWorks::CLI::VERSION
|
9
|
+
expect(STDOUT).to receive(:puts).with "opsworks-cli v#{version}"
|
10
|
+
subject.version
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
# Load shared spec files
|
5
|
+
Dir["#{File.dirname(__FILE__)}/shared/**/*.rb"].each do |file|
|
6
|
+
require file
|
7
|
+
end
|
8
|
+
|
9
|
+
# Require library up front
|
10
|
+
require 'opsworks/cli'
|
metadata
ADDED
@@ -0,0 +1,182 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: opsworks-cli
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Frank Macreery
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-05-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: aws-sdk
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: aws-keychain-util
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.5'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.5'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: aptible-tasks
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: pry
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: OpsWorks CLI
|
126
|
+
email:
|
127
|
+
- frank@macreery.com
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- .gitignore
|
133
|
+
- .rspec
|
134
|
+
- .travis.yml
|
135
|
+
- Gemfile
|
136
|
+
- LICENSE.md
|
137
|
+
- README.md
|
138
|
+
- Rakefile
|
139
|
+
- bin/opsworks
|
140
|
+
- lib/opsworks/app.rb
|
141
|
+
- lib/opsworks/cli.rb
|
142
|
+
- lib/opsworks/cli/agent.rb
|
143
|
+
- lib/opsworks/cli/helpers/keychain.rb
|
144
|
+
- lib/opsworks/cli/helpers/options.rb
|
145
|
+
- lib/opsworks/cli/subcommands/deploy.rb
|
146
|
+
- lib/opsworks/cli/subcommands/exec.rb
|
147
|
+
- lib/opsworks/cli/subcommands/status.rb
|
148
|
+
- lib/opsworks/cli/subcommands/update.rb
|
149
|
+
- lib/opsworks/cli/version.rb
|
150
|
+
- lib/opsworks/deployment.rb
|
151
|
+
- lib/opsworks/resource.rb
|
152
|
+
- lib/opsworks/stack.rb
|
153
|
+
- opsworks-cli.gemspec
|
154
|
+
- spec/opsworks/cli/agent_spec.rb
|
155
|
+
- spec/spec_helper.rb
|
156
|
+
homepage: https://github.com/aptible/opsworks-cli
|
157
|
+
licenses:
|
158
|
+
- MIT
|
159
|
+
metadata: {}
|
160
|
+
post_install_message:
|
161
|
+
rdoc_options: []
|
162
|
+
require_paths:
|
163
|
+
- lib
|
164
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - '>='
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '0'
|
169
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
requirements: []
|
175
|
+
rubyforge_project:
|
176
|
+
rubygems_version: 2.2.2
|
177
|
+
signing_key:
|
178
|
+
specification_version: 4
|
179
|
+
summary: Alternative CLI for Amazon OpsWorks
|
180
|
+
test_files:
|
181
|
+
- spec/opsworks/cli/agent_spec.rb
|
182
|
+
- spec/spec_helper.rb
|