@@ -29,6 +29,9 @@ type muxServer struct {
2929 // Routing for ephemeral resource types
3030 ephemeralResources map [string ]tfprotov5.ProviderServer
3131
32+ // Routing for generating resource configuration
33+ generateResourceConfig map [string ]tfprotov5.ProviderServer
34+
3235 // Routing for list resource types
3336 listResources map [string ]tfprotov5.ProviderServer
3437
@@ -65,6 +68,10 @@ func (s *muxServer) ProviderServer() tfprotov5.ProviderServer {
6568 return s
6669}
6770
71+ func (s * muxServer ) ProviderServers () []tfprotov5.ProviderServer {
72+ return s .servers
73+ }
74+
6875func (s * muxServer ) getActionServer (ctx context.Context , actionType string ) (tfprotov5.ProviderServer , []* tfprotov5.Diagnostic , error ) {
6976 s .serverDiscoveryMutex .RLock ()
7077 server , ok := s .actions [actionType ]
@@ -170,6 +177,41 @@ func (s *muxServer) getEphemeralResourceServer(ctx context.Context, typeName str
170177 return server , s .serverDiscoveryDiagnostics , nil
171178}
172179
180+ func (s * muxServer ) getGenerateResourceConfigServer (ctx context.Context , typeName string ) (tfprotov5.ProviderServer , []* tfprotov5.Diagnostic , error ) {
181+ s .serverDiscoveryMutex .RLock ()
182+ server , ok := s .resources [typeName ]
183+ discoveryComplete := s .serverDiscoveryComplete
184+ s .serverDiscoveryMutex .RUnlock ()
185+
186+ if discoveryComplete {
187+ if ok {
188+ return server , s .serverDiscoveryDiagnostics , nil
189+ }
190+
191+ return nil , []* tfprotov5.Diagnostic {
192+ generateResourceConfigMissingError (typeName ),
193+ }, nil
194+ }
195+
196+ err := s .serverDiscovery (ctx )
197+
198+ if err != nil || diagnosticsHasError (s .serverDiscoveryDiagnostics ) {
199+ return nil , s .serverDiscoveryDiagnostics , err
200+ }
201+
202+ s .serverDiscoveryMutex .RLock ()
203+ server , ok = s .resources [typeName ]
204+ s .serverDiscoveryMutex .RUnlock ()
205+
206+ if ! ok {
207+ return nil , []* tfprotov5.Diagnostic {
208+ generateResourceConfigMissingError (typeName ),
209+ }, nil
210+ }
211+
212+ return server , s .serverDiscoveryDiagnostics , nil
213+ }
214+
173215func (s * muxServer ) getListResourceServer (ctx context.Context , typeName string ) (tfprotov5.ProviderServer , []* tfprotov5.Diagnostic , error ) {
174216 s .serverDiscoveryMutex .RLock ()
175217 server , ok := s .listResources [typeName ]
0 commit comments