in internal/meta/base_meta.go [798:872]
func (meta *baseMeta) initProvider(ctx context.Context) error {
meta.Logger().Info("Init provider")
module, diags := tfconfig.LoadModule(meta.outdir)
if diags.HasErrors() {
return diags.Err()
}
tfblock, err := utils.InspecTerraformBlock(meta.outdir)
if err != nil {
return err
}
if module.ProviderConfigs[meta.providerName] == nil {
meta.Logger().Info("Output directory doesn't contain provider setting, create one then")
cfgFile := filepath.Join(meta.outdir, meta.outputFileNames.ProviderFileName)
// #nosec G306
if err := os.WriteFile(cfgFile, []byte(meta.buildProviderConfig()), 0644); err != nil {
return fmt.Errorf("error creating provider config: %w", err)
}
}
if tfblock == nil {
meta.Logger().Info("Output directory doesn't contain terraform block, create one then")
cfgFile := filepath.Join(meta.outdir, meta.outputFileNames.TerraformFileName)
// #nosec G306
if err := os.WriteFile(cfgFile, []byte(meta.buildTerraformConfig(meta.backendType)), 0644); err != nil {
return fmt.Errorf("error creating terraform config: %w", err)
}
}
// Initialize provider for the output directory.
var opts []tfexec.InitOption
for _, opt := range meta.backendConfig {
opts = append(opts, tfexec.BackendConfig(opt))
}
meta.Logger().Debug(`Run "terraform init" for the output directory`, "dir", meta.outdir)
if err := meta.tf.Init(ctx, opts...); err != nil {
return fmt.Errorf("error running terraform init for the output directory: %s", err)
}
// Initialize provider for the import directories.
wp := workerpool.NewWorkPool(meta.parallelism)
wp.Run(nil)
for i := range meta.importBaseDirs {
i := i
wp.AddTask(func() (interface{}, error) {
providerFile := filepath.Join(meta.importBaseDirs[i], "provider.tf")
// #nosec G306
if err := os.WriteFile(providerFile, []byte(meta.buildProviderConfig()), 0644); err != nil {
return nil, fmt.Errorf("error creating provider config: %w", err)
}
terraformFile := filepath.Join(meta.importBaseDirs[i], "terraform.tf")
// #nosec G306
if err := os.WriteFile(terraformFile, []byte(meta.buildTerraformConfig("")), 0644); err != nil {
return nil, fmt.Errorf("error creating terraform config: %w", err)
}
if meta.devProvider {
meta.Logger().Debug(`Skip running "terraform init" for the import directory (dev provider)`, "dir", meta.importBaseDirs[i])
} else {
meta.Logger().Debug(`Run "terraform init" for the import directory`, "dir", meta.importBaseDirs[i])
if err := meta.importTFs[i].Init(ctx); err != nil {
return nil, fmt.Errorf("error running terraform init: %s", err)
}
}
return nil, nil
})
}
if err := wp.Done(); err != nil {
return fmt.Errorf("initializing provider for the import directories: %v", err)
}
return nil
}