--- tags: improving-overlay-err-msgs --- # First round `ytt` overlay error message guide The purpose of this doc is to enumerate the overlay error messages possibilities and the new desired output for each scenario. ## Overlay errors ### Type mismatch #### Expected Map but was array ##### Current ``` Overlaying (in following order: overlay.yml): Document on line overlay.yml:3: Map item (key 'clients') on line overlay.yml:4: Expected map, but was *yamlmeta.Array ``` ##### New ``` ytt: Error: Overlaying (in order: overlay.yml): Type mismatch: overlay.yml:4 (map item, 'clients') expects a map config.yml:2 (map item, 'clients') has an array. overlay.yml:4 3: --- 4: clients: 5: client1: config.yml:2 1: --- 2: clients: 3: - client1: ``` ### Expects mismatch #### Not Enough Documents ##### Current ``` Overlaying (in following order: overlay.yml): Document on line overlay.yml:3: Expected number of matched nodes to be 2, but was 1 (lines: config.yml:1) ``` ##### New ``` ytt: Error: Overlaying (in order: overlay.yml): Expected: overlay.yml:3 (document, '---') to match 2 item in config.yml:1 (document, '---') but matched 1. overlay.yml:3 2: #@overlay/match by=overlay.all, expects=2 3: --- config.yml:1 1: --- ``` #### Too Many Documents ##### Current ``` Overlaying (in following order: overlay.yml): Document on line overlay.yml:3: Expected number of matched nodes to be 0, but was 1 (lines: config.yml:1) ``` ##### New ``` ytt: Error: Overlaying (in order: overlay.yml): Expected: overlay.yml:3 (document, '---') to match 0 item in config.yml:1 (document, '---') but matched 1. overlay.yml:3 2: #@overlay/match by=overlay.all, expects=0 3: --- config.yml:1 1: --- ``` #### Not Enough Map Items ##### Current ``` Overlaying (in following order: overlay.yml): Document on line overlay.yml:3: Map item (key 'clients') on line overlay.yml:5: Expected number of matched nodes to be 2, but was 1 (lines: config.yml:2) ``` ##### New ``` ytt: Error: Overlaying (in order: overlay.yml): Expected: overlay.yml:5 (map item, 'clients') to match 2 item in config.yml:2 (map in 'document') but matched 1. overlay.yml:5 3: --- 4: #@overlay/match by=overlay.all, expects=2 5: clients: ~ config.yml:2 1: --- 2: clients: ``` #### Too Many Map Items ##### Current ``` Overlaying (in following order: overlay.yml): Document on line overlay.yml:3: Map item (key 'clients') on line overlay.yml:5: Expected number of matched nodes to be 0, but was 1 (lines: config.yml:2) ``` ##### New ``` ytt: Error: Overlaying (in order: overlay.yml): Expected: overlay.yml:5 (map item, 'clients') to match 0 item in config.yml:2 (map in 'document') but matched 1. overlay.yml:5 3: --- 4: #@overlay/match by=overlay.all, expects=0 5: clients: ~ config.yml:2 1: --- 2: clients: ``` #### Not Enough Array Items ##### Current ``` Overlaying (in following order: overlay.yml): Document on line overlay.yml:3: Map item (key 'clients') on line overlay.yml:4: Array item on line overlay.yml:6: Expected number of matched nodes to be 3, but was 2 (lines: config.yml:3, config.yml:5) ``` ##### New ``` ytt: Error: Overlaying (in order: overlay.yml): Expected: overlay.yml:6 (array item, 'clients[0]') to match 3 item in config.yml:3,5 (array item in 'clients[]') but matched 2. overlay.yml:6 3: --- 4: clients: 5: #@overlay/match by=overlay.all,expects=3 6: - config.yml:3,5 1: --- 2: clients: 3: - client1: ... 5: - client2: ``` #### Too Many Array Items ##### Current ``` Overlaying (in following order: overlay.yml): Document on line overlay.yml:3: Map item (key 'clients') on line overlay.yml:4: Array item on line overlay.yml:6: Expected number of matched nodes to be 1, but was 2 (lines: config.yml:3, config.yml:5) ``` ##### New ``` ytt: Error: Overlaying (in order: overlay.yml): Expected: overlay.yml:6 (array item, 'clients[0]') to match 1 item in config.yml:3,5 (array item in 'clients[]') but matched 2. overlay.yml:6 3: --- 4: clients: 5: #@overlay/match by=overlay.all,expects=1 6: - client1: ~ config.yml:3,5 1: --- 2: clients: 3: - client1: ... 5: - client2: ``` <!--- #### Error message name template ##### Current ``` ``` ##### New ``` ``` ---> ## Use Cases ### Input Input for all use-cases is the same: `config.yml` ```yaml= --- clients: - client1: secret: blah1 - client2: secret: blah2 ``` ### Expected Map was Array `overlay.yml` ```yaml= #@ load("@ytt:overlay", "overlay") #@overlay/match by=overlay.all --- clients: client1: ``` ### Not Enough Documents `overlay.yml` ```ymal= #@ load("@ytt:overlay", "overlay") #@overlay/match by=overlay.all, expects=2 --- ``` ### Too Many Documents `overlay.yml` ```yaml= #@ load("@ytt:overlay", "overlay") #@overlay/match by=overlay.all, expects=0 --- ``` ### Not Enough Map Items `overlay.yml` ```yaml= #@ load("@ytt:overlay", "overlay") #@overlay/match by=overlay.all --- #@overlay/match by=overlay.all, expects=2 clients: ~ ``` ### Too Many Map Items `overlay.yml` ```yaml= #@ load("@ytt:overlay", "overlay") #@overlay/match by=overlay.all --- #@overlay/match by=overlay.all, expects=0 clients: ~ ``` ### Not Enough Array Items `overlay.yml` ```yaml= #@ load("@ytt:overlay", "overlay") #@overlay/match by=overlay.all --- clients: #@overlay/match by=overlay.all,expects=3 - ``` ### Too Many Array Items `overlay.yml` ```yaml= #@ load("@ytt:overlay", "overlay") #@overlay/match by=overlay.all --- clients: #@overlay/match by=overlay.all,expects=1 - client1: ~ ```