github.com/opentofu/opentofu@v1.7.1/internal/tofu/transform_resource_count.go (about)

     1  // Copyright (c) The OpenTofu Authors
     2  // SPDX-License-Identifier: MPL-2.0
     3  // Copyright (c) 2023 HashiCorp, Inc.
     4  // SPDX-License-Identifier: MPL-2.0
     5  
     6  package tofu
     7  
     8  import (
     9  	"log"
    10  
    11  	"github.com/opentofu/opentofu/internal/addrs"
    12  	"github.com/opentofu/opentofu/internal/configs/configschema"
    13  	"github.com/opentofu/opentofu/internal/dag"
    14  )
    15  
    16  // ResourceCountTransformer is a GraphTransformer that expands the count
    17  // out for a specific resource.
    18  //
    19  // This assumes that the count is already interpolated.
    20  type ResourceCountTransformer struct {
    21  	Concrete ConcreteResourceInstanceNodeFunc
    22  	Schema   *configschema.Block
    23  
    24  	Addr          addrs.ConfigResource
    25  	InstanceAddrs []addrs.AbsResourceInstance
    26  }
    27  
    28  func (t *ResourceCountTransformer) Transform(g *Graph) error {
    29  	for _, addr := range t.InstanceAddrs {
    30  		abstract := NewNodeAbstractResourceInstance(addr)
    31  		abstract.Schema = t.Schema
    32  		var node dag.Vertex = abstract
    33  		if f := t.Concrete; f != nil {
    34  			node = f(abstract)
    35  		}
    36  
    37  		log.Printf("[TRACE] ResourceCountTransformer: adding %s as %T", addr, node)
    38  		g.Add(node)
    39  	}
    40  	return nil
    41  }