@@ -49,6 +49,12 @@ var Operation = require('./operation.js');
49
49
*/
50
50
var Region = require ( './region.js' ) ;
51
51
52
+ /**
53
+ * @type {module:compute/rule }
54
+ * @private
55
+ */
56
+ var Rule = require ( './rule.js' ) ;
57
+
52
58
/**
53
59
* @type {module:common/service }
54
60
* @private
@@ -311,6 +317,96 @@ Compute.prototype.createNetwork = function(name, config, callback) {
311
317
} ) ;
312
318
} ;
313
319
320
+ /**
321
+ * Create a global forwarding rule.
322
+ *
323
+ * @resource [GlobalForwardingRule Resource]{@link https://cloud.google.com/compute/docs/reference/v1/globalForwardingRules#resource}
324
+ * @resource [GlobalForwardingRules: insert API Documentation]{@link https://cloud.google.com/compute/docs/reference/v1/globalForwardingRules/insert}
325
+ *
326
+ * @param {string } name - Name of the rule.
327
+ * @param {object } config - See a
328
+ * [GlobalForwardingRule resource](https://cloud.google.com/compute/docs/reference/v1/globalForwardingRules#resource).
329
+ * @param {string= } config.ip - The single IP address this forwarding rule will
330
+ * match against. All traffic that matches the IP address, protocol, and
331
+ * ports of this forwarding rule will be handled by this rule. If specified,
332
+ * the IP address must be a static external IP address. To create a new
333
+ * ephemeral external IP address for the forwarding rule, leave this field
334
+ * empty. (Alias for `config.IPAddress`)
335
+ * @param {string= } config.protocol - The type of protocol that this forwarding
336
+ * rule matches. Valid values are `AH`, `ESP`, `SCTP`, `TCP`, `UDP`.
337
+ * Default: `TCP`. (Alias for `config.IPProtocol`)
338
+ * @param {string= } config.range - A single port or single contiguous port
339
+ * range, ranging from low to high for which this forwarding rule matches.
340
+ * Packets of the specified protocol sent to these ports will be forwarded
341
+ * on to the appropriate target pool or target instance. If this field is
342
+ * left empty, then the forwarding matches traffic for all ports for the
343
+ * specified protocol. (Alias for `config.portRange`)
344
+ * @param {string } config.target - The full or valid partial URL of the target
345
+ * resource to receive the matched traffic. This target must be a global
346
+ * [`TargetHttpProxy` or `TargetHttpsProxy` resource](https://cloud.google.com/compute/docs/load-balancing/http/target-proxies).
347
+ * @param {function } callback - The callback function.
348
+ * @param {?error } callback.err - An error returned while making this request.
349
+ * @param {module:compute/rule } callback.rule - The created Rule object.
350
+ * @param {module:compute/operation } callback.operation - An operation object
351
+ * that can be used to check the status of the request.
352
+ * @param {object } callback.apiResponse - The full API response.
353
+ *
354
+ * @example
355
+ * var name = 'new-rule-name';
356
+ *
357
+ * var config = {
358
+ * target: 'global/targetHttpProxies/my-proxy',
359
+ * range: '8080-8089'
360
+ * };
361
+ *
362
+ * gce.createRule(name, config, function (err, rule, operation, apiResponse) {
363
+ * // `rule` is a Rule object.
364
+ *
365
+ * // `operation` is an Operation object that can be used to check the status
366
+ * // of the request.
367
+ * });
368
+ */
369
+ Compute . prototype . createRule = function ( name , config , callback ) {
370
+ var self = this ;
371
+
372
+ var body = extend ( { } , config , {
373
+ name : name
374
+ } ) ;
375
+
376
+ if ( body . ip ) {
377
+ body . IPAddress = body . ip ;
378
+ delete body . ip ;
379
+ }
380
+
381
+ if ( body . protocol ) {
382
+ body . IPProtocol = body . protocol ;
383
+ delete body . protocol ;
384
+ }
385
+
386
+ if ( body . range ) {
387
+ body . portRange = body . range ;
388
+ delete body . range ;
389
+ }
390
+
391
+ this . request ( {
392
+ method : 'POST' ,
393
+ uri : '/global/forwardingRules' ,
394
+ json : body
395
+ } , function ( err , resp ) {
396
+ if ( err ) {
397
+ callback ( err , null , null , resp ) ;
398
+ return ;
399
+ }
400
+
401
+ var rule = self . rule ( name ) ;
402
+
403
+ var operation = self . operation ( resp . name ) ;
404
+ operation . metadata = resp ;
405
+
406
+ callback ( null , rule , operation , resp ) ;
407
+ } ) ;
408
+ } ;
409
+
314
410
/**
315
411
* Create a backend service.
316
412
*
@@ -1159,6 +1255,109 @@ Compute.prototype.getRegions = function(options, callback) {
1159
1255
} ) ;
1160
1256
} ;
1161
1257
1258
+ /**
1259
+ * Get a list of forwading rules.
1260
+ *
1261
+ * @resource [GlobalForwardingRules: list API Documentation]{@link https://cloud.google.com/compute/docs/reference/v1/globalForwardingRules/list}
1262
+ *
1263
+ * @param {object= } options - Rules search options.
1264
+ * @param {boolean } options.autoPaginate - Have pagination handled
1265
+ * automatically. Default: true.
1266
+ * @param {string } options.filter - Search filter in the format of
1267
+ * `{name} {comparison} {filterString}`.
1268
+ * - **`name`**: the name of the field to compare
1269
+ * - **`comparison`**: the comparison operator, `eq` (equal) or `ne`
1270
+ * (not equal)
1271
+ * - **`filterString`**: the string to filter to. For string fields, this
1272
+ * can be a regular expression.
1273
+ * @param {number } options.maxResults - Maximum number of rules to return.
1274
+ * @param {string } options.pageToken - A previously-returned page token
1275
+ * representing part of the larger set of results to view.
1276
+ * @param {function } callback - The callback function.
1277
+ * @param {?error } callback.err - An error returned while making this request.
1278
+ * @param {module:compute/rule } callback.rules - Rule objects from this region.
1279
+ * @param {?object } callback.nextQuery - If present, query with this object to
1280
+ * check for more results.
1281
+ * @param {object } callback.apiResponse - The full API response.
1282
+ *
1283
+ * @example
1284
+ * gce.getRules(function(err, rules) {
1285
+ * // `rules` is an array of `Rule` objects.
1286
+ * });
1287
+ *
1288
+ * //-
1289
+ * // To control how many API requests are made and page through the results
1290
+ * // manually, set `autoPaginate` to `false`.
1291
+ * //-
1292
+ * function callback(err, rules, nextQuery, apiResponse) {
1293
+ * if (nextQuery) {
1294
+ * // More results exist.
1295
+ * gce.getRules(nextQuery, callback);
1296
+ * }
1297
+ * }
1298
+ *
1299
+ * gce.getRules({
1300
+ * autoPaginate: false
1301
+ * }, callback);
1302
+ *
1303
+ * //-
1304
+ * // Get the rules from your project as a readable object stream.
1305
+ * //-
1306
+ * gce.getRules()
1307
+ * .on('error', console.error)
1308
+ * .on('data', function(rule) {
1309
+ * // `rule` is a `Rule` object.
1310
+ * })
1311
+ * .on('end', function() {
1312
+ * // All rules retrieved.
1313
+ * });
1314
+ *
1315
+ * //-
1316
+ * // If you anticipate many results, you can end a stream early to prevent
1317
+ * // unnecessary processing and API requests.
1318
+ * //-
1319
+ * gce.getRules()
1320
+ * .on('data', function(rule) {
1321
+ * this.end();
1322
+ * });
1323
+ */
1324
+ Compute . prototype . getRules = function ( options , callback ) {
1325
+ var self = this ;
1326
+
1327
+ if ( is . fn ( options ) ) {
1328
+ callback = options ;
1329
+ options = { } ;
1330
+ }
1331
+
1332
+ options = options || { } ;
1333
+
1334
+ this . request ( {
1335
+ uri : '/global/forwardingRules' ,
1336
+ qs : options
1337
+ } , function ( err , resp ) {
1338
+ if ( err ) {
1339
+ callback ( err , null , null , resp ) ;
1340
+ return ;
1341
+ }
1342
+
1343
+ var nextQuery = null ;
1344
+
1345
+ if ( resp . nextPageToken ) {
1346
+ nextQuery = extend ( { } , options , {
1347
+ pageToken : resp . nextPageToken
1348
+ } ) ;
1349
+ }
1350
+
1351
+ var rules = ( resp . items || [ ] ) . map ( function ( rule ) {
1352
+ var ruleInstance = self . rule ( rule . name ) ;
1353
+ ruleInstance . metadata = rule ;
1354
+ return ruleInstance ;
1355
+ } ) ;
1356
+
1357
+ callback ( null , rules , nextQuery , resp ) ;
1358
+ } ) ;
1359
+ } ;
1360
+
1162
1361
/**
1163
1362
* Get a list of backend services.
1164
1363
*
@@ -1630,6 +1829,19 @@ Compute.prototype.region = function(name) {
1630
1829
return new Region ( this , name ) ;
1631
1830
} ;
1632
1831
1832
+ /**
1833
+ * Get a reference to a Google Compute Engine forwading rule.
1834
+ *
1835
+ * @param {string } name - Name of the rule.
1836
+ * @return {module:compute/rule }
1837
+ *
1838
+ * @example
1839
+ * var rule = gce.rule('rule-name');
1840
+ */
1841
+ Compute . prototype . rule = function ( name ) {
1842
+ return new Rule ( this , name ) ;
1843
+ } ;
1844
+
1633
1845
/**
1634
1846
* Get a reference to a Google Compute Engine backend service.
1635
1847
*
@@ -1688,6 +1900,7 @@ streamRouter.extend(Compute, [
1688
1900
'getNetworks' ,
1689
1901
'getOperations' ,
1690
1902
'getRegions' ,
1903
+ 'getRules' ,
1691
1904
'getServices' ,
1692
1905
'getSnapshots' ,
1693
1906
'getVMs' ,
0 commit comments