in lib/cloud-metadata/gcp.js [27:94]
function getMetadataGcp(
connectTimeoutMs,
resTimeoutMs,
logger,
baseUrlOverride,
cb,
) {
const baseUrl = baseUrlOverride || DEFAULT_BASE_URL;
const options = {
method: 'GET',
timeout: resTimeoutMs,
connectTimeout: connectTimeoutMs,
headers: {
'Metadata-Flavor': 'Google',
},
};
const url = baseUrl + 'computeMetadata/v1/?recursive=true';
const req = httpRequest(url, options, function (res) {
const finalData = [];
res.on('data', function (data) {
finalData.push(data);
});
res.on('end', function (data) {
if (res.statusCode !== 200) {
logger.debug('gcp metadata: unexpected statusCode: %s', res.statusCode);
cb(
new Error(
'error fetching gcp metadata: unexpected statusCode: ' +
res.statusCode,
),
);
return;
}
// Note: We could also guard on the response having the
// 'Metadata-Flavor: Google' header as done by:
// https://github.com/googleapis/gcp-metadata/blob/v6.0.0/src/index.ts#L109-L112
let result;
try {
result = formatMetadataStringIntoObject(finalData.join(''));
} catch (err) {
logger.debug(
'gcp metadata server responded, but there was an ' +
'error parsing the result: %o',
err,
);
cb(err);
return;
}
cb(null, result);
});
});
req.on('timeout', function () {
req.destroy(new Error('request to metadata server timed out'));
});
req.on('connectTimeout', function () {
req.destroy(new Error('could not ping metadata server'));
});
req.on('error', function (err) {
cb(err);
});
req.end();
}