diff --git a/package/lib/compileFunctions.js b/package/lib/compileFunctions.js index 5306fd2..c1f3ad2 100644 --- a/package/lib/compileFunctions.js +++ b/package/lib/compileFunctions.js @@ -32,6 +32,10 @@ module.exports = { `gs://${this.serverless.service.provider.deploymentBucketName}/${this.serverless.service.package.artifactFilePath}` ); + funcTemplate.properties.serviceAccountEmail = + _.get(funcObject, 'serviceAccountEmail') || + _.get(this, 'serverless.service.provider.serviceAccountEmail') || + null; funcTemplate.properties.availableMemoryMb = _.get(funcObject, 'memorySize') || _.get(this, 'serverless.service.provider.memorySize') || @@ -48,6 +52,10 @@ module.exports = { funcObject.environment // eslint-disable-line comma-dangle ); + if (!funcTemplate.properties.serviceAccountEmail) { + delete funcTemplate.properties.serviceAccountEmail; + } + if (funcObject.vpc) { _.assign(funcTemplate.properties, { vpcConnector: _.get(funcObject, 'vpc') || _.get(this, 'serverless.service.provider.vpc'), diff --git a/provider/googleProvider.js b/provider/googleProvider.js index ebb4d04..dc926f2 100644 --- a/provider/googleProvider.js +++ b/provider/googleProvider.js @@ -41,6 +41,27 @@ class GoogleProvider { logging: google.logging('v2'), cloudfunctions: google.cloudfunctions('v1'), }; + + this.variableResolvers = { + gs: this.getGsValue, + }; + } + + getGsValue(variableString) { + const groups = variableString.split(':')[1].split('/'); + const bucket = groups.shift(); + const object = groups.join('/'); + + return this.serverless + .getProvider('google') + .request('storage', 'objects', 'get', { + bucket, + object, + alt: 'media', + }) + .catch(err => { + throw new Error(`Error getting value for ${variableString}. ${err.message}`); + }); } request() {