terraformBlock static method

Map<String, dynamic> terraformBlock(
  1. Stack stack
)

The top-level terraform { ... } block: required_version, required_providers, optional backend.

Assumes Stack.validate found no issue: provider coverage (every resource, data source and module call has its StackProvider) is a MissingProvider there, not a throw here.

Implementation

static Map<String, dynamic> terraformBlock(Stack stack) {
  final requiredProviders = <String, dynamic>{};
  for (final p in stack.providers) {
    final entry =
        requiredProviders.putIfAbsent(
              p.providerName,
              () => <String, dynamic>{
                'source': p.source,
                'version': p.versionConstraint,
              },
            )
            as Map<String, dynamic>;
    if (!stack.isConfigurationAlias(p)) continue;
    final aliases =
        entry.putIfAbsent('configuration_aliases', () => <String>[])
            as List<String>;
    aliases.add(providerReference(p));
  }

  final out = <String, dynamic>{
    'required_version': stack.requiredVersion,
    if (requiredProviders.isNotEmpty) 'required_providers': requiredProviders,
  };

  final backend = stack.backend;
  if (backend != null) {
    out['backend'] = _encodeBackend(backend);
  }

  return out;
}