示例#1
0
        public void Existing_resources_can_be_referenced_at_other_scopes()
        {
            var typeName     = "My.Rp/myResource@2020-01-01";
            var typeProvider = ResourceTypeProviderHelper.CreateAzResourceTypeProvider(factory => {
                var stringType = factory.Create(() => new Azure.Bicep.Types.Concrete.BuiltInType(BuiltInTypeKind.String));
                var objectType = factory.Create(() => new Azure.Bicep.Types.Concrete.ObjectType(typeName, new Dictionary <string, ObjectProperty> {
                    ["name"] = new ObjectProperty(factory.GetReference(stringType), ObjectPropertyFlags.DeployTimeConstant),
                    ["kind"] = new ObjectProperty(factory.GetReference(stringType), ObjectPropertyFlags.ReadOnly),
                }, null));
                var resourceType = factory.Create(() => new Azure.Bicep.Types.Concrete.ResourceType(typeName, ScopeType.ResourceGroup, factory.GetReference(objectType)));
            });

            // explicitly pass a valid scope
            var(template, _, _) = CompilationHelper.Compile(typeProvider, ("main.bicep", @"
resource resourceA 'My.Rp/myResource@2020-01-01' existing = {
  name: 'resourceA'
  scope: resourceGroup()
}

output resourceARef string = resourceA.kind
"));

            template !.Should().NotBeNull();
            using (new AssertionScope())
            {
                template !.SelectToken("$.outputs['resourceARef'].value") !.Should().DeepEqual("[reference(extensionResourceId(resourceGroup().id, 'My.Rp/myResource', 'resourceA'), '2020-01-01', 'full').kind]");
            }

            // use a valid targetScope without setting the scope property
            (template, _, _) = CompilationHelper.Compile(typeProvider, ("main.bicep", @"
targetScope = 'resourceGroup'

resource resourceA 'My.Rp/myResource@2020-01-01' existing = {
  name: 'resourceA'
}

output resourceARef string = resourceA.kind
"));

            template !.Should().NotBeNull();
            using (new AssertionScope())
            {
                template !.SelectToken("$.outputs['resourceARef'].value") !.Should().DeepEqual("[reference(resourceId('My.Rp/myResource', 'resourceA'), '2020-01-01', 'full').kind]");
            }
        }
示例#2
0
        public void Errors_are_raised_for_existing_resources_at_invalid_scopes()
        {
            var typeName     = "My.Rp/myResource@2020-01-01";
            var typeProvider = ResourceTypeProviderHelper.CreateAzResourceTypeProvider(factory => {
                var stringType = factory.Create(() => new Azure.Bicep.Types.Concrete.BuiltInType(BuiltInTypeKind.String));
                var objectType = factory.Create(() => new Azure.Bicep.Types.Concrete.ObjectType(typeName, new Dictionary <string, ObjectProperty> {
                    ["name"] = new ObjectProperty(factory.GetReference(stringType), ObjectPropertyFlags.DeployTimeConstant),
                }, null));
                var resourceType = factory.Create(() => new Azure.Bicep.Types.Concrete.ResourceType(typeName, ScopeType.ResourceGroup, factory.GetReference(objectType)));
            });

            // explicitly pass an invalid scope
            var(_, diags, _) = CompilationHelper.Compile(typeProvider, ("main.bicep", @"
resource resourceA 'My.Rp/myResource@2020-01-01' existing = {
  name: 'resourceA'
  scope: subscription()
}
"));

            diags.Should().HaveDiagnostics(new[] {