fastlyctl 1.0.9 → 1.0.11
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 +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +50 -0
- data/lib/fastlyctl/cli.rb +1 -0
- data/lib/fastlyctl/commands/logging/bigquery.rb +133 -0
- data/lib/fastlyctl/commands/logging.rb +72 -0
- data/lib/fastlyctl/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c0c20fe758873efe396f68d050d11c8c3675f352918a2a9a9ba55d4a334879f
|
4
|
+
data.tar.gz: 70d29a51e74acffa02ff2a330694cb86d1a6d262cbc95d2967440a0777c61601
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a75044ca703cb25c00b3968f2d8a59936f8bbc54af13b02480ea273b4a85b5da5cdd76bf51c828f2d73e9452c8e3538133471b79c01e3424c0fb35afcdf8df21
|
7
|
+
data.tar.gz: 1db8c990dd3cb81fec5e6bb92f6b9b2e0dd8f1a3b03d522c0e573f1fe1617d4ab17c4c006f7a188e43b8d9e38747f6f794e996d17c5b8859e64eba0bf6da5f98
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -199,6 +199,56 @@ Flags:
|
|
199
199
|
* --s: The service ID to download. Current working directory is assumed.
|
200
200
|
* --v: The version to download. The currently active version is assumed.
|
201
201
|
|
202
|
+
### logging
|
203
|
+
|
204
|
+
Manage the realtime logging configuration for a service, as well as checking on the status of the logging endpoints. Logging requires a subcommand of either `status` or the name of a logging provider listed below.
|
205
|
+
|
206
|
+
##### status
|
207
|
+
|
208
|
+
Status returns the current status of your logging configurations in JSON format. Helps in telling you whether or not the logging is working or returning an error.
|
209
|
+
|
210
|
+
Usage:
|
211
|
+
```
|
212
|
+
fastlyctl logging status
|
213
|
+
```
|
214
|
+
|
215
|
+
Flags:
|
216
|
+
|
217
|
+
* `--s / --service` Service ID to use
|
218
|
+
|
219
|
+
##### BigQuery
|
220
|
+
|
221
|
+
Usage:
|
222
|
+
```
|
223
|
+
fastlyctl logging bigquery ACTION [FLAGS]
|
224
|
+
```
|
225
|
+
|
226
|
+
Supported ACTIONs are `create`, `update`, `show`, `delete`, `list`
|
227
|
+
|
228
|
+
Flags:
|
229
|
+
|
230
|
+
* `--s / --service` Service ID to use (required)
|
231
|
+
* `--v / --version` Version of the service to use
|
232
|
+
* `--n / --name` Current name of the logging configuration
|
233
|
+
* `--nn / --new-name` Used for the update method to rename a configuration
|
234
|
+
* `--ff / --format-file` Path to the file containing the JSON Representation of the logline, must match BigQuery schema
|
235
|
+
* `--u / --user` Google Cloud Service Account Email
|
236
|
+
* `--scf / --secret-key-file` Path to the file that contains the Google Cloud Account secret key
|
237
|
+
* `--p / --project-id` Google Cloud Project ID
|
238
|
+
* `--d / --dataset` Google BigQuery dataset
|
239
|
+
* `--t / --table` Google BigQuery table
|
240
|
+
* `--ts / --template-suffix` Google table name suffix
|
241
|
+
* `--pl / --placement` Placement of the logging call, can be none or waf_debug. Not required and no default
|
242
|
+
* `--r / --response-condition` When to execute, if empty it is always
|
243
|
+
|
244
|
+
|
245
|
+
To print the full list of the options required type the command:
|
246
|
+
|
247
|
+
```
|
248
|
+
fastlyctl logging bigquery --help
|
249
|
+
```
|
250
|
+
|
251
|
+
|
202
252
|
### login
|
203
253
|
|
204
254
|
Login to the Fastly app and create an API token. This token will be stored in your home directory for the CLI to use for all requests.
|
data/lib/fastlyctl/cli.rb
CHANGED
@@ -0,0 +1,133 @@
|
|
1
|
+
module BigQuery
|
2
|
+
|
3
|
+
def BigQuery.parse_secret_key(file)
|
4
|
+
key = File.read(file)
|
5
|
+
if key[0..26] != "-----BEGIN PRIVATE KEY-----"
|
6
|
+
abort "Error, private key file should begin with -----BEGIN PRIVATE KEY-----"
|
7
|
+
end
|
8
|
+
|
9
|
+
return key
|
10
|
+
end
|
11
|
+
|
12
|
+
def BigQuery.ensure_opts(required_opts,options)
|
13
|
+
required_opts.each { |k|
|
14
|
+
if !options.key?(k)
|
15
|
+
abort "Error, option #{k.to_s} is required for this action"
|
16
|
+
end
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
def BigQuery.print_configs(config)
|
21
|
+
max = {}
|
22
|
+
max["name"] = 0
|
23
|
+
max["dataset"] = 0
|
24
|
+
max["table"] = 0
|
25
|
+
max["project_id"] = 0
|
26
|
+
fields = ["name","dataset","table","project_id"]
|
27
|
+
|
28
|
+
config.each { |c|
|
29
|
+
fields.each { |f|
|
30
|
+
max[f] = c[f].length > max[f] ? c[f].length : max[f]
|
31
|
+
}
|
32
|
+
}
|
33
|
+
|
34
|
+
puts
|
35
|
+
puts "Name".ljust(max["name"]) + " | " + "Dataset".ljust(max["dataset"]) + " | " + "Table".ljust(max["table"]) + " | " + "ProjectId".ljust(max["project_id"])
|
36
|
+
puts "-" * (max["name"] + max["dataset"] + max["table"] + max["project_id"])
|
37
|
+
config.each { |c|
|
38
|
+
puts "%s | %s | %s | %s" % [c["name"].ljust(max["name"]), c["dataset"].ljust(max["dataset"]), c["table"].ljust(max["table"]), c["project_id"].ljust(max["project_id"])]
|
39
|
+
}
|
40
|
+
puts
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
def self.create(options)
|
45
|
+
puts "Creating bigquery log endpoint"
|
46
|
+
required_opts = ["name", "format_file", "user", "secret_key_file", "project_id", "dataset", "table" ]
|
47
|
+
|
48
|
+
ensure_opts(required_opts,options)
|
49
|
+
|
50
|
+
parsed_key = parse_secret_key(options[:secret_key_file])
|
51
|
+
|
52
|
+
parsed_format = File.read(options[:format_file])
|
53
|
+
|
54
|
+
params = {}
|
55
|
+
|
56
|
+
id = options[:service]
|
57
|
+
version = FastlyCTL::Fetcher.get_writable_version(id) unless options[:version]
|
58
|
+
version ||= options[:version]
|
59
|
+
|
60
|
+
params[:name] = options[:name]
|
61
|
+
params[:format] = parsed_format
|
62
|
+
params[:user] = options[:user]
|
63
|
+
params[:secret_key] = parsed_key
|
64
|
+
params[:project_id] = options[:project_id]
|
65
|
+
params[:dataset] = options[:dataset]
|
66
|
+
params[:table] = options[:table]
|
67
|
+
|
68
|
+
FastlyCTL::Fetcher.api_request(:post, "/service/#{id}/version/#{version}/logging/bigquery", body: params)
|
69
|
+
puts "BigQuery logging provider created in service id #{id} on version #{version}"
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.update(options)
|
73
|
+
required_opts = ["name"]
|
74
|
+
ensure_opts(required_opts,options)
|
75
|
+
|
76
|
+
puts "Updating bigquery log endpoint #{options[:name]}"
|
77
|
+
|
78
|
+
parsed_key = parse_secret_key(options[:secret_key_file]) unless options[:secret_key_file].nil?
|
79
|
+
parsed_format = File.read(options[:format_file]) unless options[:format_file].nil?
|
80
|
+
|
81
|
+
params = {}
|
82
|
+
|
83
|
+
id = options[:service]
|
84
|
+
version = FastlyCTL::Fetcher.get_writable_version(id) unless options[:version]
|
85
|
+
version ||= options[:version]
|
86
|
+
|
87
|
+
params[:name] = options[:new_name] unless options[:new_name].nil?
|
88
|
+
params[:format] = parsed_format unless options[:format_file].nil?
|
89
|
+
params[:user] = options[:user] unless options[:user].nil?
|
90
|
+
params[:secret_key] = parsed_key unless options[:secret_key_file].nil?
|
91
|
+
params[:project_id] = options[:project_id] unless options[:project_id].nil?
|
92
|
+
params[:dataset] = options[:dataset] unless options[:dataset].nil?
|
93
|
+
params[:table] = options[:table] unless options[:table].nil?
|
94
|
+
|
95
|
+
FastlyCTL::Fetcher.api_request(:put, "/service/#{id}/version/#{version}/logging/bigquery/#{options[:name]}", body: params)
|
96
|
+
puts "BigQuery logging provider update in service id #{id} on version #{version}"
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.list(options)
|
100
|
+
id = options[:service]
|
101
|
+
version = FastlyCTL::Fetcher.get_writable_version(id) unless options[:version]
|
102
|
+
version ||= options[:version]
|
103
|
+
|
104
|
+
puts "Listing all BigQuery configurations for service #{id} version #{version}"
|
105
|
+
|
106
|
+
configs = FastlyCTL::Fetcher.api_request(:get, "/service/#{id}/version/#{version}/logging/bigquery")
|
107
|
+
print_configs(configs)
|
108
|
+
end
|
109
|
+
|
110
|
+
def self.show(options)
|
111
|
+
required_opts = ["name"]
|
112
|
+
ensure_opts(required_opts,options)
|
113
|
+
id = options[:service]
|
114
|
+
version = FastlyCTL::Fetcher.get_writable_version(id) unless options[:version]
|
115
|
+
version ||= options[:version]
|
116
|
+
|
117
|
+
resp = FastlyCTL::Fetcher.api_request(:get, "/service/#{id}/version/#{version}/logging/bigquery/#{options[:name]}")
|
118
|
+
puts JSON.pretty_generate(resp)
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.delete(options)
|
122
|
+
required_opts = ["version","name"]
|
123
|
+
ensure_opts(required_opts,options)
|
124
|
+
|
125
|
+
id = options[:service]
|
126
|
+
version = FastlyCTL::Fetcher.get_writable_version(id) unless options[:version]
|
127
|
+
version ||= options[:version]
|
128
|
+
|
129
|
+
resp = FastlyCTL::Fetcher.api_request(:delete, "/service/#{id}/version/#{version}/logging/bigquery/#{options[:name]}")
|
130
|
+
puts JSON.pretty_generate(resp)
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require "fastlyctl/commands/logging/bigquery"
|
2
|
+
|
3
|
+
module FastlyCTL
|
4
|
+
class LoggingSubCmd < Thor
|
5
|
+
namespace :logging
|
6
|
+
|
7
|
+
# bit of a monkey patch to fix --help output
|
8
|
+
def self.banner(command, namespace = nil, subcommand = false)
|
9
|
+
"#{basename} logging #{command.usage}"
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "bigquery <action>", "Setup BigQuery As a logging provider, available actions are create, update, delete, list and show"
|
13
|
+
method_option :service, :aliases => ["--s","--service"], :banner => "Service ID to use", :required => true
|
14
|
+
method_option :version, :aliases => ["--v", "--version"], :banner => "Version of the service to use"
|
15
|
+
method_option :name, :aliases => ["--n", "--name"], :banner => "Current name of the logging configuration"
|
16
|
+
method_option :new_name, :aliases => ["--nn","--new-name"], :banner => "Used for the update method to rename a configuration"
|
17
|
+
method_option :format_file, :aliases => ["--ff","--format-file"], :banner => "File containing the JSON Representation of the logline, must match BigQuery schema"
|
18
|
+
method_option :format_version, :aliases => ["--fv","--format-version"], :banner => "Version of customer format, either 1 or 2, defaults to 2"
|
19
|
+
method_option :user, :aliases => ["--u","--user"], :banner => "Google Cloud Service Account Email"
|
20
|
+
method_option :secret_key_file, :aliases => ["--scf", "--secret-key-file"],:banner => "File that contains the Google Cloud Account secret key"
|
21
|
+
method_option :project_id, :aliases => ["--p","--project-id"], :banner => "Google Cloud Project ID"
|
22
|
+
method_option :dataset, :aliases => ["--d","--dataset"], :banner => "BigQuery Dataset"
|
23
|
+
method_option :table, :aliases => ["--t","--table"], :banner => "BigQuery Table"
|
24
|
+
method_option :template_suffix, :aliases => ["--ts","--template-suffix"], :banner => "Optional table name suffix"
|
25
|
+
method_option :placement, :aliases => ["--pl","--placement"], :banner => "Placement of the logging call, can be none or waf_debug. Not required and no default"
|
26
|
+
method_option :response_condition, :aliases => ["--r","--response-condition"], :banner => "When to execute, if empty it is always"
|
27
|
+
|
28
|
+
def bigquery(action)
|
29
|
+
case action
|
30
|
+
when "create"
|
31
|
+
BigQuery.create(options)
|
32
|
+
when "list"
|
33
|
+
BigQuery.list(options)
|
34
|
+
when "update"
|
35
|
+
BigQuery.update(options)
|
36
|
+
when "show"
|
37
|
+
BigQuery.show(options)
|
38
|
+
when "delete"
|
39
|
+
BigQuery.delete(options)
|
40
|
+
else
|
41
|
+
abort "Sorry, invalid action #{action} supplied, only create, update, delete and show are valid."
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
# Placeholder for future S3 work
|
47
|
+
# desc "s3 <action>", "Setup S3 as a logging provider"
|
48
|
+
# method_option :format, :required => true
|
49
|
+
# method_option :keyfile, :required => true
|
50
|
+
# method_option :email , :required => true
|
51
|
+
|
52
|
+
# def s3(action)
|
53
|
+
# puts "S3: #{action}"
|
54
|
+
# end
|
55
|
+
|
56
|
+
desc "status", "Check the last output of the logging status"
|
57
|
+
method_option :service, :aliases => ["--s","--service"], :banner => "Service ID to use", :required => true
|
58
|
+
|
59
|
+
def status
|
60
|
+
id = options[:service]
|
61
|
+
resp = FastlyCTL::Fetcher.api_request(:get, "/service/#{id}/logging_status")
|
62
|
+
say(JSON.pretty_generate(resp))
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
class CLI < Thor
|
68
|
+
desc "logging SUBCOMMAND ...ARGS", "Interface with Fastly Logging"
|
69
|
+
subcommand "logging", LoggingSubCmd
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
data/lib/fastlyctl/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlyctl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Basile
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: typhoeus
|
@@ -103,6 +103,8 @@ files:
|
|
103
103
|
- lib/fastlyctl/commands/diff.rb
|
104
104
|
- lib/fastlyctl/commands/domain.rb
|
105
105
|
- lib/fastlyctl/commands/download.rb
|
106
|
+
- lib/fastlyctl/commands/logging.rb
|
107
|
+
- lib/fastlyctl/commands/logging/bigquery.rb
|
106
108
|
- lib/fastlyctl/commands/login.rb
|
107
109
|
- lib/fastlyctl/commands/open.rb
|
108
110
|
- lib/fastlyctl/commands/purge_all.rb
|