train-alicloud 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +13 -0
- data/lib/train-alicloud.rb +21 -0
- data/lib/train-alicloud/connection.rb +87 -0
- data/lib/train-alicloud/platform.rb +39 -0
- data/lib/train-alicloud/transport.rb +40 -0
- data/lib/train-alicloud/version.rb +10 -0
- metadata +78 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 70ab43053ff407de562c98318dd1e0926951729dcc3b021d661436f569ae5e7f
|
4
|
+
data.tar.gz: fc23966ae524f096879dc0dfe256a994d569c820b5328102f8896d47ae02a840
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cf6670f8a94e0d406757a86ba52501423eb2337d13634ca018d61e8dc2b1046248dab67f012f32c64e28f7c559f310c024487e0d4661dd114d48234e94787f2e
|
7
|
+
data.tar.gz: 972218f9739808b247533091b3a037bfa4d4dabc005bd1afa9dd00684ba9b9328498724eaadb7315760f6b4f42c4418967ffce07068418333f699d895091b386
|
data/LICENSE
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Copyright (c) 2020 Chef Software Inc.
|
2
|
+
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
6
|
+
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# This file is known as the "entry point."
|
2
|
+
# This is the file Train will try to load if it
|
3
|
+
# thinks your plugin is needed.
|
4
|
+
|
5
|
+
# The *only* thing this file should do is setup the
|
6
|
+
# load path, then load plugin files.
|
7
|
+
|
8
|
+
# Next two lines simply add the path of the gem to the load path.
|
9
|
+
# This is not needed when being loaded as a gem; but when doing
|
10
|
+
# plugin development, you may need it. Either way, it's harmless.
|
11
|
+
libdir = File.dirname(__FILE__)
|
12
|
+
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
|
13
|
+
|
14
|
+
# It's traditonal to keep your gem version in a separate file, so CI can find it easier.
|
15
|
+
require_relative "train-alicloud/version"
|
16
|
+
|
17
|
+
# A train plugin has three components: Transport, Connection, and Platform.
|
18
|
+
# Transport acts as the glue.
|
19
|
+
require_relative "train-alicloud/transport"
|
20
|
+
require_relative "train-alicloud/platform"
|
21
|
+
require_relative "train-alicloud/connection"
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# Connection definition file for an example Train plugin.
|
2
|
+
|
3
|
+
# Most of the work of a Train plugin happens in this file.
|
4
|
+
# Connections derive from Train::Plugins::Transport::BaseConnection,
|
5
|
+
# and provide a variety of services. Later generations of the plugin
|
6
|
+
# API will likely separate out these responsibilities, but for now,
|
7
|
+
# some of the responsibilities include:
|
8
|
+
# * authentication to the target
|
9
|
+
# * platform / release /family detection
|
10
|
+
# * caching
|
11
|
+
# * API execution
|
12
|
+
# * marshalling to / from JSON
|
13
|
+
# You don't have to worry about most of this.
|
14
|
+
|
15
|
+
# Push platform detection out to a mixin, as it tends
|
16
|
+
# to develop at a different cadence than the rest
|
17
|
+
require_relative "platform"
|
18
|
+
require "train"
|
19
|
+
require "train/plugins"
|
20
|
+
|
21
|
+
require "aliyunsdkcore"
|
22
|
+
|
23
|
+
module TrainPlugins
|
24
|
+
module AliCloud
|
25
|
+
# You must inherit from BaseConnection.
|
26
|
+
class Connection < Train::Plugins::Transport::BaseConnection
|
27
|
+
# We've placed platform detection in a separate module; pull it in here.
|
28
|
+
include TrainPlugins::AliCloud::Platform
|
29
|
+
|
30
|
+
def initialize(options)
|
31
|
+
# 'options' here is a hash, Symbol-keyed,
|
32
|
+
# of what Train.target_config decided to do with the URI that it was
|
33
|
+
# passed by `inspec -t` (or however the application gathered target information)
|
34
|
+
# Some plugins might use this moment to capture credentials from the URI,
|
35
|
+
# and the configure an underlying SDK accordingly.
|
36
|
+
# You might also take a moment to manipulate the options.
|
37
|
+
# Have a look at the Local, SSH, and AWS transports for ideas about what
|
38
|
+
# you can do with the options.
|
39
|
+
|
40
|
+
# Override for any cli options
|
41
|
+
# alicloud://region
|
42
|
+
options[:region] = options[:host] || options[:region]
|
43
|
+
|
44
|
+
# Now let the BaseConnection have a chance to configure itself.
|
45
|
+
super(options)
|
46
|
+
|
47
|
+
# Force enable caching.
|
48
|
+
enable_cache :api_call
|
49
|
+
|
50
|
+
# Why are we doing this?
|
51
|
+
ENV["ALICLOUD_REGION"] = @options[:region] if @options[:region]
|
52
|
+
end
|
53
|
+
|
54
|
+
def alicloud_client(api:, api_version:)
|
55
|
+
region = @options[:region]
|
56
|
+
|
57
|
+
endpoint ||= if api == "sts"
|
58
|
+
"https://#{api}.aliyuncs.com"
|
59
|
+
else
|
60
|
+
"https://#{api}.#{region}.aliyuncs.com"
|
61
|
+
end
|
62
|
+
|
63
|
+
RPCClient.new(
|
64
|
+
access_key_id: @options[:access_key_id],
|
65
|
+
access_key_secret: @options[:secret_access_key],
|
66
|
+
endpoint: endpoint,
|
67
|
+
api_version: api_version
|
68
|
+
)
|
69
|
+
end
|
70
|
+
|
71
|
+
def alicloud_resource(klass, args)
|
72
|
+
klass.new(args)
|
73
|
+
end
|
74
|
+
|
75
|
+
# TODO: determine exactly what this is used for
|
76
|
+
def uri
|
77
|
+
"alicloud://#{@options[:region]}"
|
78
|
+
end
|
79
|
+
|
80
|
+
def unique_identifier
|
81
|
+
# use alicloud account id
|
82
|
+
caller_identity = alicloud_client(api: "sts", api_version: "2015-04-01").request(action: "GetCallerIdentity")
|
83
|
+
caller_identity["AccountId"]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative "version"
|
2
|
+
|
3
|
+
# Platform definition file. This is a good place to separate out any
|
4
|
+
# logic regarding the identification of the OS or API at the far end
|
5
|
+
# of the connection.
|
6
|
+
|
7
|
+
# Abbreviate the namespace here, if you like.
|
8
|
+
module TrainPlugins::AliCloud
|
9
|
+
# Since we're mixing in the platform detection facility into Connection,
|
10
|
+
# this has to come in as a Module.
|
11
|
+
module Platform
|
12
|
+
# The method `platform` is called when platform detection is
|
13
|
+
# about to be performed. Train core defines a sophisticated
|
14
|
+
# system for platform detection, but for most plugins, you'll
|
15
|
+
# only ever run on the special platform for which you are targeting.
|
16
|
+
def platform
|
17
|
+
# If you are declaring a new platform, you will need to tell
|
18
|
+
# Train a bit about it.
|
19
|
+
# If you were defining a cloud API, you should say you are a member
|
20
|
+
# of the cloud family.
|
21
|
+
|
22
|
+
# This plugin defines a new platform.
|
23
|
+
Train::Platforms.name("alicloud").in_family("cloud")
|
24
|
+
|
25
|
+
# When you know you will only ever run on your dedicated platform
|
26
|
+
# force_platform! lets you bypass platform detection.
|
27
|
+
# The options to this are not currently documented completely.
|
28
|
+
|
29
|
+
# Use release to report a version number. You might use the version
|
30
|
+
# of the plugin, or a version of an important underlying SDK, or a
|
31
|
+
# version of a remote API.
|
32
|
+
alicloud_version = Gem.loaded_specs["aliyunsdkcore"].version
|
33
|
+
alicloud_version = "aliyunsdkcore: v#{alicloud_version}"
|
34
|
+
plugin_version = "train-alicloud: v#{TrainPlugins::AliCloud::VERSION}"
|
35
|
+
|
36
|
+
force_platform!("alicloud", release: "#{plugin_version}, #{alicloud_version}")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
|
2
|
+
require "train"
|
3
|
+
require "train/plugins"
|
4
|
+
require "aliyunsdkcore"
|
5
|
+
|
6
|
+
# Train Plugins v1 are usually declared under the TrainPlugins namespace.
|
7
|
+
# Each plugin has three components: Transport, Connection, and Platform.
|
8
|
+
# We'll only define the Transport here, but we'll refer to the others.
|
9
|
+
require_relative "connection"
|
10
|
+
|
11
|
+
module TrainPlugins
|
12
|
+
module AliCloud
|
13
|
+
class Transport < Train.plugin(1)
|
14
|
+
name "alicloud"
|
15
|
+
|
16
|
+
# Pass ENV vars in using a block to `option`. This causes `
|
17
|
+
# option to lazy-evaluate the block to provide a default value.`
|
18
|
+
# Otherwise, we would read the ENV var (and set the default)
|
19
|
+
# once at compile time, which would make testing difficult.
|
20
|
+
# TODO: convert to thor-style defaults
|
21
|
+
option(:region, required: true) { ENV["ALICLOUD_REGION"] }
|
22
|
+
option(:access_key_id, required: true) { ENV["ALICLOUD_ACCESS_KEY"] }
|
23
|
+
option(:secret_access_key, required: true) { ENV["ALICLOUD_SECRET_KEY"] }
|
24
|
+
|
25
|
+
# The only thing you MUST do in a transport is a define a
|
26
|
+
# connection() method that returns a instance that is a
|
27
|
+
# subclass of BaseConnection.
|
28
|
+
|
29
|
+
# The options passed to this are undocumented and rarely used.
|
30
|
+
def connection(_instance_opts = nil)
|
31
|
+
# Typical practice is to cache the connection as an instance variable.
|
32
|
+
# Do what makes sense for your platform.
|
33
|
+
# @options here is the parsed options that the calling
|
34
|
+
# app handed to us at process invocation. See the Connection class
|
35
|
+
# for more details.
|
36
|
+
@connection ||= TrainPlugins::AliCloud::Connection.new(@options)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# This file exists simply to record the version number of the plugin.
|
2
|
+
# It is kept in a separate file, so that your gemspec can load it and
|
3
|
+
# learn the current version without loading the whole plugin. Also,
|
4
|
+
# many CI servers can update this file when "version bumping".
|
5
|
+
|
6
|
+
module TrainPlugins
|
7
|
+
module AliCloud
|
8
|
+
VERSION = "0.0.2".freeze
|
9
|
+
end
|
10
|
+
end
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: train-alicloud
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chef InSpec Team
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-11-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aliyunsdkcore
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.16
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.16
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: aliyun-sdk
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.8'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.8'
|
41
|
+
description: Allows applications using Train to speak to AliCloud; handles authentication,
|
42
|
+
cacheing, and SDK dependency management.
|
43
|
+
email:
|
44
|
+
- inspec@chef.io
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- LICENSE
|
50
|
+
- lib/train-alicloud.rb
|
51
|
+
- lib/train-alicloud/connection.rb
|
52
|
+
- lib/train-alicloud/platform.rb
|
53
|
+
- lib/train-alicloud/transport.rb
|
54
|
+
- lib/train-alicloud/version.rb
|
55
|
+
homepage: https://github.com/chef-customers/train-alicloud
|
56
|
+
licenses:
|
57
|
+
- Apache-2.0
|
58
|
+
metadata: {}
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
requirements: []
|
74
|
+
rubygems_version: 3.1.2
|
75
|
+
signing_key:
|
76
|
+
specification_version: 4
|
77
|
+
summary: AliCloud API Transport for Train
|
78
|
+
test_files: []
|