コード例 #1
0
        public void Parent_syntax_loops_are_not_handled()
        {
            var bicepFile = @"
var parentName = 'resA'
        
resource resA 'My.Rp/resA@2020-01-01' = [for i in range(0, 1): {
  name: 'resA${i}'
}]

resource resB 'My.Rp/resA/childB@2020-01-01' = [for i in range(0, 1): {
  name: 'resA${i}/resB'
  dependsOn: [
    resA[i]
  ]
}]";

            var(_, _, compilation) = CompilationHelper.Compile(("main.bicep", bicepFile));
            var rewriter = new ParentChildResourceNameRewriter(compilation.GetEntrypointSemanticModel());

            var newProgramSyntax = rewriter.Rewrite(compilation.SyntaxTreeGrouping.EntryPoint.ProgramSyntax);

            PrintHelper.PrintAndCheckForParseErrors(newProgramSyntax).Should().Be(
                @"var parentName = 'resA'

resource resA 'My.Rp/resA@2020-01-01' = [for i in range(0, 1): {
  name: 'resA${i}'
}]

resource resB 'My.Rp/resA/childB@2020-01-01' = [for i in range(0, 1): {
  name: 'resA${i}/resB'
  dependsOn: [
    resA[i]
  ]
}]");
        }
コード例 #2
0
        public void Mismatching_resource_type_will_not_be_replaced()
        {
            var bicepFile = @"
var parentName = 'resA'
        
resource resA 'My.Rp/resA@2020-01-01' = {
  name: '${parentName}'
}

resource resB 'My.Rp/resB/childB@2020-01-01' = {
  name: '${parentName}/resB'
  dependsOn: [
    resA
  ]
}";

            var(_, _, compilation) = CompilationHelper.Compile(("main.bicep", bicepFile));
            var rewriter = new ParentChildResourceNameRewriter(compilation.GetEntrypointSemanticModel());

            var newProgramSyntax = rewriter.Rewrite(compilation.SyntaxTreeGrouping.EntryPoint.ProgramSyntax);

            PrintHelper.PrintAndCheckForParseErrors(newProgramSyntax).Should().Be(
                @"var parentName = 'resA'

resource resA 'My.Rp/resA@2020-01-01' = {
  name: '${parentName}'
}

resource resB 'My.Rp/resB/childB@2020-01-01' = {
  name: '${parentName}/resB'
  dependsOn: [
    resA
  ]
}");
        }
コード例 #3
0
        public void Parent_syntax_common_variable_reference_in_string_can_be_replaced()
        {
            var bicepFile = @"
var parentName = 'resA'
        
resource resA 'My.Rp/resA@2020-01-01' = {
  name: '${parentName}'
}

resource resB 'My.Rp/resA/childB@2020-01-01' = {
  name: '${parentName}/resB'
  dependsOn: [
    resA
  ]
}";

            var(_, _, compilation) = CompilationHelper.Compile(("main.bicep", bicepFile));
            var rewriter = new ParentChildResourceNameRewriter(compilation.GetEntrypointSemanticModel());

            var newProgramSyntax = rewriter.Rewrite(compilation.SyntaxTreeGrouping.EntryPoint.ProgramSyntax);

            PrintHelper.PrettyPrint(newProgramSyntax).Should().Be(
                @"var parentName = 'resA'

resource resA 'My.Rp/resA@2020-01-01' = {
  name: '${parentName}'
}

resource resB 'My.Rp/resA/childB@2020-01-01' = {
  name: '${resA.name}/resB'
  dependsOn: [
    resA
  ]
}");
        }
コード例 #4
0
        public void Parent_syntax_common_multiple_variable_references_in_string_can_be_replaced()
        {
            var bicepFile = @"
param parentName string = 'resA'
var parentSuffix = 'suffix'
var test = 'hello'

resource resA 'My.Rp/resA@2020-01-01' = {
  name: 'a${parentName}b${parentSuffix}'
}

resource resB 'My.Rp/resA/childB@2020-01-01' = {
  name: 'a${parentName}b${parentSuffix}/${test}'
  dependsOn: [
    resA
  ]
}

resource resC 'My.Rp/resA/childB/childC@2020-01-01' = {
  name: 'a${parentName}b${parentSuffix}/${test}/test'
  dependsOn: [
    resB
  ]
}";

            var(_, _, compilation) = CompilationHelper.Compile(("main.bicep", bicepFile));
            var rewriter = new ParentChildResourceNameRewriter(compilation.GetEntrypointSemanticModel());

            var newProgramSyntax = rewriter.Rewrite(compilation.SyntaxTreeGrouping.EntryPoint.ProgramSyntax);

            PrintHelper.PrintAndCheckForParseErrors(newProgramSyntax).Should().Be(
                @"param parentName string = 'resA'
var parentSuffix = 'suffix'
var test = 'hello'

resource resA 'My.Rp/resA@2020-01-01' = {
  name: 'a${parentName}b${parentSuffix}'
}

resource resB 'My.Rp/resA/childB@2020-01-01' = {
  name: '${resA.name}/${test}'
  dependsOn: [
    resA
  ]
}

resource resC 'My.Rp/resA/childB/childC@2020-01-01' = {
  name: '${resB.name}/test'
  dependsOn: [
    resB
  ]
}");
        }
コード例 #5
0
        public void Parent_resources_with_expression_names_are_identified()
        {
            // this is a minimal repro for https://github.com/Azure/bicep/issues/2008
            var bicepFile = @"
var resAName = 'resA'
var resBName = 'resB'

resource resA 'My.Rp/parent@2020-01-01' = {
  name: '${resAName}'
}

resource resB 'My.Rp/parent@2020-01-01' = {
  name: '${resBName}'
}

resource childA 'My.Rp/parent/child@2020-01-01' = {
  name: '${resAName}/child'
}

resource childB 'My.Rp/parent/child@2020-01-01' = {
  name: '${resBName}/child'
}";

            var(_, _, compilation) = CompilationHelper.Compile(("main.bicep", bicepFile));
            var rewriter = new ParentChildResourceNameRewriter(compilation.GetEntrypointSemanticModel());

            var newProgramSyntax = rewriter.Rewrite(compilation.SyntaxTreeGrouping.EntryPoint.ProgramSyntax);

            PrintHelper.PrintAndCheckForParseErrors(newProgramSyntax).Should().Be(
                @"var resAName = 'resA'
var resBName = 'resB'

resource resA 'My.Rp/parent@2020-01-01' = {
  name: '${resAName}'
}

resource resB 'My.Rp/parent@2020-01-01' = {
  name: '${resBName}'
}

resource childA 'My.Rp/parent/child@2020-01-01' = {
  parent: resA
  name: 'child'
}

resource childB 'My.Rp/parent/child@2020-01-01' = {
  parent: resB
  name: 'child'
}");
        }
コード例 #6
0
        public void Parent_syntax_conditions_are_handled()
        {
            var bicepFile = @"
param condA bool
param condB bool

var parentName = 'resA'

resource resA 'My.Rp/resA@2020-01-01' = if (condA) {
  name: parentName
}

resource resB 'My.Rp/resA/childB@2020-01-01' = if (condB) {
  name: '${parentName}/resB'
  dependsOn: [
    resA
  ]
}";

            var(_, _, compilation) = CompilationHelper.Compile(("main.bicep", bicepFile));
            var rewriter = new ParentChildResourceNameRewriter(compilation.GetEntrypointSemanticModel());

            var newProgramSyntax = rewriter.Rewrite(compilation.SyntaxTreeGrouping.EntryPoint.ProgramSyntax);

            PrintHelper.PrintAndCheckForParseErrors(newProgramSyntax).Should().Be(
                @"param condA bool
param condB bool

var parentName = 'resA'

resource resA 'My.Rp/resA@2020-01-01' = if (condA) {
  name: parentName
}

resource resB 'My.Rp/resA/childB@2020-01-01' = if (condB) {
  parent: resA
  name: 'resB'
  dependsOn: [
    resA
  ]
}");
        }