in provider/parameter_store_provider.go [106:185]
func (p *ParameterStoreProvider) fetchParameterStoreBatch(
client ParameterStoreClient,
ctx context.Context,
batchDescriptors []*SecretDescriptor,
curMap map[string]*v1alpha1.ObjectVersion,
) (v []*SecretValue, err error) {
var values []*SecretValue
// Build up the batch of parameter names.
var names []*string
batchDesc := make(map[string]*SecretDescriptor)
for _, descriptor := range batchDescriptors {
// Use either version or label if specified (but not both)
parameterName := descriptor.GetSecretName(client.IsFailover)
if len(descriptor.GetObjectVersion(client.IsFailover)) != 0 {
parameterName = fmt.Sprintf("%s:%s", parameterName, descriptor.GetObjectVersion(client.IsFailover))
} else if len(descriptor.GetObjectVersionLabel(client.IsFailover)) != 0 {
parameterName = fmt.Sprintf("%s:%s", parameterName, descriptor.GetObjectVersionLabel(client.IsFailover))
}
names = append(names, aws.String(parameterName))
batchDesc[descriptor.GetSecretName(client.IsFailover)] = descriptor // Needed for response
}
// Fetch the batch of secrets
rsp, err := client.Client.GetParametersWithContext(ctx, &ssm.GetParametersInput{
Names: names,
WithDecryption: aws.Bool(true),
})
if err != nil {
return nil, fmt.Errorf("%s: Failed fetching parameters: %w", client.Region, err)
}
if len(rsp.InvalidParameters) != 0 {
err = awserr.NewRequestFailure(awserr.New("", fmt.Sprintf("%s: Invalid parameters: %s", client.Region, strings.Join(aws.StringValueSlice(rsp.InvalidParameters), ", ")), err), 400, "")
return nil, err
}
// Build up the results from the batch
for _, parm := range rsp.Parameters {
// SecretDescriptor key is either Name or ARN.
descriptor := batchDesc[*(parm.Name)]
if descriptor == nil {
descriptor = batchDesc[*(parm.ARN)]
}
secretValue := &SecretValue{
Value: []byte(*(parm.Value)),
Descriptor: *descriptor,
}
values = append(values, secretValue)
//Fetch individual json key value pairs if jmesPath is specified
jsonSecrets, jsonErr := secretValue.getJsonSecrets()
if jsonErr != nil {
return nil, fmt.Errorf("%s: %s", client.Region, jsonErr)
}
values = append(values, jsonSecrets...)
// Update the version in the current version map.
for _, jsonSecret := range jsonSecrets {
jsonDescriptor := jsonSecret.Descriptor
curMap[jsonDescriptor.GetFileName()] = &v1alpha1.ObjectVersion{
Id: jsonDescriptor.GetFileName(),
Version: strconv.Itoa(int(*(parm.Version))),
}
}
curMap[descriptor.GetFileName()] = &v1alpha1.ObjectVersion{
Id: descriptor.GetFileName(),
Version: strconv.Itoa(int(*(parm.Version))),
}
}
return values, nil
}