fastlyctl 1.0.4 → 1.0.5

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
  SHA256:
3
- metadata.gz: 6fa41e6ea6712a1065c4d81c9113ab86451adcff4b586ad63b6d1449ac3a0a54
4
- data.tar.gz: 8640eee6253a25aab53c21b98c32d588209e782d3085f11e67bef9af42e51fc1
3
+ metadata.gz: a3ff6e61fc266fedb6875186c971f06296b055d2bb02a8e9c90fd432086c16df
4
+ data.tar.gz: c2f3e3245be9b049184bc72baae907009773d1f89ba5c69aba669f195c397305
5
5
  SHA512:
6
- metadata.gz: 84327784e9592df352398ba26b6e5b498693fabdf9b0717bf098c2b02014a1ed8c5e7c88be6323f4193d60c05ada4c1a6fd45546b0ae501ee68a54159ec52037
7
- data.tar.gz: 51321b1f519aca18a50dcdd7ce478808472adfedbec53833452925374eb07b75bf141883732b40031bf81ec24e35f0043c2f880eb2d150c9f30f8c551e7d680b
6
+ metadata.gz: 615b36475eff2a4511a0219823ef6aff66be34a1e03edce842651f951f225ab4473ca7eaf70afe99a7bbfb54fafb0a0d61ecc65ea77a45f975cf4b8e989a9714
7
+ data.tar.gz: ca36f9bcf1ad670c10ee70addaa7165f7efeb8c5260c1da78d3f6870633f8ac4f284652b8a709f6d2bceef55305927d42fbe974b8918c9be1993d8c8618c8038
data/README.md CHANGED
@@ -137,11 +137,13 @@ Available Actions:
137
137
  * upsert: Inserts a new item into a dictionary. If the item exists, its value will be updated.
138
138
  * remove: Removes an item from a dictionary.
139
139
  * list_items: Lists all items in a dictionary.
140
+ * sync: Synchronizes a dictionary with a comma separated list of key/value pairs. Will create, delete, or update keys as needed. Separate keys and values with `=` or `:`.
140
141
  * bulk_add: Adds multiple items to a dictionary. See [this documentation](https://docs.fastly.com/api/config#dictionary_item_dc826ce1255a7c42bc48eb204eed8f7f) for information on the format.
141
142
 
142
143
  Flags:
143
144
  * --s: The service ID to use. Current working directory is assumed.
144
145
  * --v: The version to use. Latest writable version is assumed.
146
+ * --wo: When used with `create`, flags the dictionary as write-only.
145
147
 
146
148
  ### diff
147
149
 
@@ -6,9 +6,11 @@ module FastlyCTL
6
6
  upsert: Update a key in a dictionary if it exists. Add the key if it does not.\n
7
7
  remove: Remove a key from a dictionary\n
8
8
  list_items: List all keys in the dictionary\n
9
+ sync: Synchronizes a dictionary with a comma separated list of key/value pairs. Will create, delete, or update keys as needed. Separate keys and values with = or :.\n
9
10
  bulk_add: Perform operations on the dictionary in bulk. A list of operations in JSON format should be specified in the key field. Documentation on this format can be found here: https://docs.fastly.com/api/config#dictionary_item_dc826ce1255a7c42bc48eb204eed8f7f"
10
11
  method_option :service, :aliases => ["--s"]
11
12
  method_option :version, :aliases => ["--v"]
13
+ method_option :write_only, :aliases => ["--wo"]
12
14
  def dictionary(action, name=false, key=false, value=false)
13
15
  id = FastlyCTL::Utils.parse_directory unless options[:service]
14
16
  id ||= options[:service]
@@ -23,7 +25,11 @@ module FastlyCTL
23
25
  case action
24
26
  when "create"
25
27
  abort "Must specify name for dictionary" unless name
26
- FastlyCTL::Fetcher.api_request(:post, "/service/#{id}/version/#{version}/dictionary", params: { name: name })
28
+
29
+ params = { name: name }
30
+ params[:write_only] = true if options.key?(:write_only)
31
+
32
+ FastlyCTL::Fetcher.api_request(:post, "/service/#{id}/version/#{version}/dictionary", params: params)
27
33
 
28
34
  say("Dictionary #{name} created.")
29
35
  when "delete"
@@ -62,6 +68,54 @@ module FastlyCTL
62
68
  resp.each do |i|
63
69
  puts "#{i["item_key"]} : #{i["item_value"]}"
64
70
  end
71
+ when "sync"
72
+ abort "Must specify name for dictionary" unless name
73
+ abort "Must supply comma separated list of keys and values as the \"key\" parameter. " unless key
74
+
75
+ pairs = {}
76
+ key.split(',').to_set.to_a.each do |kv|
77
+ kv = kv.split("=") if kv.include?("=")
78
+ kv = kv.split(":") if kv.include?(":")
79
+ abort "Keys and values must be separated by an = or : symbol. Found \"#{kv}\"" unless kv.is_a?(Array)
80
+ pairs[kv[0]] = kv[1]
81
+ end
82
+ item_ids = Hash.new
83
+ bulk = []
84
+
85
+ dictionary = FastlyCTL::Fetcher.api_request(:get, "/service/#{id}/version/#{version}/dictionary/#{encoded_name}")
86
+ items = FastlyCTL::Fetcher.api_request(:get, "/service/#{id}/dictionary/#{dictionary["id"]}/items")
87
+ items.each do |item|
88
+ unless pairs.key?(item["item_key"])
89
+ bulk.push({
90
+ "op" => "delete",
91
+ "item_key" => item["item_key"]
92
+ })
93
+ next
94
+ end
95
+
96
+ if (pairs[item["item_key"]] != item["item_value"])
97
+ bulk.push({
98
+ "op": "upsert",
99
+ "item_key": item["item_key"],
100
+ "item_value": item["item_value"]
101
+ })
102
+ end
103
+
104
+ pairs.delete(item["item_key"])
105
+ end
106
+
107
+ pairs.each do |k,v|
108
+ bulk.push({
109
+ "op": "create",
110
+ "item_key": k,
111
+ "item_value": v
112
+ })
113
+ end
114
+
115
+ FastlyCTL::Fetcher.api_request(:patch, "/service/#{id}/dictionary/#{dictionary["id"]}/items", {body: {items: bulk}.to_json, headers: {"Content-Type" => "application/json"}})
116
+
117
+ say("Sync operation completed successfully with #{bulk.length} operations.")
118
+
65
119
  when "bulk_add"
66
120
  abort "Must specify name for dictionary" unless name
67
121
  abort "Must specify JSON blob of operations in key field. Documentation on this can be found here: https://docs.fastly.com/api/config#dictionary_item_dc826ce1255a7c42bc48eb204eed8f7f" unless key
@@ -1,3 +1,3 @@
1
1
  module FastlyCTL
2
- VERSION = "1.0.4"
2
+ VERSION = "1.0.5"
3
3
  end
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
4
+ version: 1.0.5
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-05-02 00:00:00.000000000 Z
11
+ date: 2019-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler