ComponentResourceOptions.Providers I feel like th...
# dotnet
s
ComponentResourceOptions.Providers I feel like there has to be a beter way to pass in use multiple provider objects for the Same platform. I was using Inputs, and may go back to it. Because the Providers property is a ListProviders. There's no good way to lookup the passed in values. And you have to know their names, which defeats the purpsoe of passing them in. Below is where I'm at. And this feels slimey. The exmaple is dumb yes. But the purpose is, I need an old Azure provider and 2 new ones representing different subscriptions. The providers seemed a better way of managing this but it appears designed for using providers from different platforms. Not multiple from the same. Other options, ideas, problems people have hit?
Copy code
using Pulumi;
using Pulumi.AzureNative.Resources;

class MyStack : Stack
{
  public MyStack()
  {
    // Define the first Azure provider for Subscription 1
    var provider1 = new Pulumi.AzureNative.Provider("provider1", new Pulumi.AzureNative.ProviderArgs
    {
      SubscriptionId = "your-subscription-id-1"
    });

    // Define the second Azure provider for Subscription 2
    var provider2 = new Pulumi.AzureNative.Provider("provider2", new Pulumi.AzureNative.ProviderArgs
    {
      SubscriptionId = "your-subscription-id-2"
    });

    var component = new MyComponent("test", new() { }, new ComponentResourceOptions
    {
      Providers = {
              provider1,
              provider2
            }
    });
  }
}

class MyComponent : ComponentResource
{
  public MyComponent(string name, ComponentResourceOptions options)
      : base("my:module:MyComponent", name, options)
  {
    // Accessing providers from ComponentResourceOptions
    if (options?.Providers != null)
    {
      ProviderResource provider1 = null;
      ProviderResource provider2 = null;
      foreach (var p in options.Providers)
      {
        p.Urn.Apply(u =>
        {
          if (u.EndsWith("provider1 "))
          {
            provider1 = p;
          }
          else if (u.EndsWith("provider2"))
          {
            provider2 = p;
          }
          return u;
        });
      }


      // Create a Resource Group in Subscription 1
      var rg1 = new ResourceGroup("rg1", new ResourceGroupArgs
      {
        ResourceGroupName = "rg1"
      }, new CustomResourceOptions
      {
        Provider = provider1
      });

      // Create a Resource Group in Subscription 2
      var rg2 = new ResourceGroup("rg2", new ResourceGroupArgs
      {
        ResourceGroupName = "rg2"
      }, new CustomResourceOptions
      {
        Provider = provider2
      });
    }
  }
}