Skip to content
Ilya Sher edited this page Dec 21, 2018 · 9 revisions

Short useful examples with explanations

List all top level functions in NGS

ngs -pi 'globals().filterv(Fun)'
  • globals() returns a Hash of all global variables
  • filterv() filters a Hash by predicate applied to values, resulting a new Hash
  • Fun - the function type (callable)
  • A type t, when used as predicate act as F(x) x is t, a predicate

Match all occurrences of a regular expression

Get all certificates from a certificate chain

certs = read(fileName) ~~ /-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----/ms

Parse openssl output (subject), convert to a Hash

subject = (`echo ${cert} | openssl x509 -subject -noout` - Sfx("\n") - Pfx("subject= /")).split("/").map(split(X, "=")).Hash()
  • `...` runs a command and captures the output, similar to bash
  • - Sfx("\n") removes newline at the end. See Sfx type.
  • - Pfx("subject= /") removes undesired prefix of the string. See Pfx type
  • .split("/") splits the line by /, resulting an array of strings. See split method
  • .map(split(X, "=")) splits each string in the array, resulting an array of the form [["k1", "v1"], ["k2, "v2"]]. See map method
  • .Hash() converts array of the form [["k1", "v1"], ["k2, "v2"]] to a Hash

Delete AWS ACM certificates by regular expression

ngs -e '``aws acm list-certificates --region us-east-1``.filter({"DomainName": /MYREGEX/}).CertificateArn.each(F(arn) $(aws acm delete-certificate --certificate-arn $arn --region us-east-1))'
  • ``aws acm list-certificates --region us-east-1`` - run AWS CLI and parse the output. Result is in array of hashes. This differs from the regular JSON output structure from AWS tools which is {"SomeKey": [array, with, interesting, data]}. It's the [array, with, interesting, data].
  • .filter({"DomainName": /MYREGEX/}) - filter elements. Only keep elements of the array (in our case each element is a hash) in which DomainName matches MYREGEX regular expression
  • .CertificateArn - convert array of hashes (describing each certificate) to array of strings containing ARNs of the certificates. Same as .map(F(x) x.CertificateArn) .
  • .each(...) - execute the passed function for each element, passing the element as the argument.
    • F(arn) ... - the function to be executed for each ARN
      • $(...) - run external program