HewlettPackard / oneview-puppet

This project is no longer being developed and has limited support. In the near future this repository will be fully deprecated. Please consider using other OneView projects, such as Terraform and Ansible Collection
https://forge.puppet.com/hewlettpackard/oneview
Apache License 2.0
8 stars 17 forks source link

Failing to create oneview_enclosure_group resources with interconnectBayMappings in v2.10.0 #330

Closed riconem closed 3 years ago

riconem commented 3 years ago

Scenario/Intent

Trying to create a oneview_enclosure_group with interconnectBayMappings.

Environment Details

Steps to Reproduce

Create a oneview_enclosure_group resource like in the examples.

oneviewconf::oneview::logical_interconnect_groups:
  LIG_01:
    ensure: present
    data:
      name: LIG_01
      enclosureType: SY12000
      consistencyCheckingForInternalNetworks: ExactMatch
      interconnectBaySet: 3
      enclosureIndexes:
      - 1
      redundancyType: Redundant
      interconnects:
      - bay: 6
        type: Virtual Connect SE 40Gb F8 Module for Synergy
        enclosure_index: 1
      - bay: 3
        type: Virtual Connect SE 40Gb F8 Module for Synergy
        enclosure_index: 1

oneviewconf::oneview::enclosure_groups:
  Enclosure_Group_Example:
    require: Oneview_logical_interconnect_group[LIG_01]
    ensure: present
    data:
      name: Enclosure_Group_Example
      stackingMode: Enclosure
      interconnectBayMappingCount: 2
      enclosureCount: 1
      interconnectBayMappings:
      - interconnectBay: 3
        logicalInterconnectGroupUri: LIG_01
      - interconnectBay: 6
        logicalInterconnectGroupUri: LIG_01

Expected Result

Creation of a oneview_enclosure_group resource.

Actual Result

See Error Message:

Notice: /Stage[main]/Oneviewconf::Oneview/Oneview_logical_interconnect_group[LIG_01]/ensure: created
Error: /Stage[main]/Oneviewconf::Oneview/Oneview_enclosure_group[Enclosure_Group_Example]: Could not evaluate: undefined method `[]' for nil:NilClass

Quick fix

The example worked for me in version v2.9.0. So the error must have come from new changes in v2.10.0. In the oneview_enclosure_group provider were some changes. See the following.

      lig_name = mapping_attr['logicalInterconnectGroupUri'] if mapping_attr['logicalInterconnectGroupUri']
      lig = OneviewSDK.resource_named(:LogicalInterconnectGroup, api_version, resource_variant).find_by(@client, name: lig_name)
      mapping_attr['logicalInterconnectGroupUri'] = lig.first['uri']

This code tries to to parse the logicalInterconnectGroupUri parameter but this is already done in the parent provider. https://github.com/HewlettPackard/oneview-puppet/blob/9adeeacb0d333864b75946fb88c76a732251090c/lib/puppet/provider/oneview_resource.rb#L68

I printed out what the @data variable looks like at the beginning of the data_parse function in the oneview_enclosure_group provider. See the following.

{"name"=>"Enclosure_Group_Example",
 "stackingMode"=>"Enclosure",
 "interconnectBayMappingCount"=>2,
 "enclosureCount"=>1,
 "interconnectBayMappings"=>
  [{"interconnectBay"=>3,
    "logicalInterconnectGroupUri"=>
     "/rest/logical-interconnect-groups/7b24e8c5-e4f8-429d-88f1-641dac2c5503"},
   {"interconnectBay"=>6,
    "logicalInterconnectGroupUri"=>
     "/rest/logical-interconnect-groups/7b24e8c5-e4f8-429d-88f1-641dac2c5503"}]}
Error: /Stage[main]/Oneviewconf::Oneview/Oneview_enclosure_group[Enclosure_Group_Example]: Could not evaluate: undefined method `[]' for nil:NilClass

As you can see the parsing is already done and the data_parse function in the oneview_enclosure_group provider is not necessary. So I deleted that function completly and it worked. See the output.

Info: Performing create of EnclosureGroup Enclosure_Group_Example using the following data:
{
  "name": "Enclosure_Group_Example",
  "stackingMode": "Enclosure",
  "interconnectBayMappingCount": 2,
  "enclosureCount": 1,
  "interconnectBayMappings": [
    {
      "interconnectBay": 3,
      "logicalInterconnectGroupUri": "/rest/logical-interconnect-groups/7b24e8c5-e4f8-429d-88f1-641dac2c5503"
    },
    {
      "interconnectBay": 6,
      "logicalInterconnectGroupUri": "/rest/logical-interconnect-groups/7b24e8c5-e4f8-429d-88f1-641dac2c5503"
    }
  ]
}.
Notice: /Stage[main]/Oneviewconf::Oneview/Oneview_enclosure_group[Enclosure_Group_Example]/ensure: created
VenkateshRavula commented 3 years ago

This SDK has limited support and will not be actively developed for the foreseeable future.