Skip to content

Instantly share code, notes, and snippets.

@wtnabe
Last active April 1, 2020 00:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wtnabe/37dd89a0ba89c7d6ac6c334c3809fc16 to your computer and use it in GitHub Desktop.
Save wtnabe/37dd89a0ba89c7d6ac6c334c3809fc16 to your computer and use it in GitHub Desktop.
List up functions with filter
#! /usr/bin/env ruby
require 'json'
#
# [param] Proc filter
#
def main(&filter)
puts projects.select { |project|
functionEnabled?(services(project['projectId']))
}.map { |project|
project_id = project['projectId']
functions(project_id).map { |f|
[project_id, f['name']].join("\t") if filter.call(f)
}
}.flatten
end
#
# [return] Array
#
def projects
JSON.parse(`gcloud projects list --format=json`).select { |project|
project['projectId'] !~ /^sys-/
}
end
#
# [param] String project
# [return] Hash
#
def services(project)
JSON.parse(`gcloud services list --format=json --project #{project}`)
end
#
# [param] Array services
# [return] Boolean
#
def functionEnabled?(services)
services.any? { |service|
service.dig('config', 'name') =~ /cloudfunctions/
}
end
#
# [param] String project
# [return] Array
#
def functions(project)
JSON.parse(`gcloud functions list --format=json --project #{project}`)
end
__END__
Usage:
puts main { |func| func['runtime'] != 'nodejs10' }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment