Skip to content

Commit 40b84c3

Browse files
committed
init/updateFortiOSTerraform: 1.24.0
Signed-off-by: FTNT-HQCM <hq-devops-admin@fortinet.com>
1 parent 207d0bd commit 40b84c3

460 files changed

Lines changed: 54926 additions & 17506 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,29 @@
1-
## 1.24.0 (Unreleased)
1+
## 1.25.0 (Unreleased)
22

33

4+
## 1.24.0 (Jan 14, 2026)
5+
BUG FIXES:
6+
7+
* Fix mac address upper case issue;
8+
* Fix extra quote issue;
9+
* Fix nil pointer issue;
10+
* Ignore add empty value for variables that could affect other arguments;
11+
* Fix false required variables of resource firewall_centralsnatmap;
12+
* Fix issue of tcp_portrange could not be set of resource firewallservice_custom;
13+
* Fix table order mismatch issue;
14+
15+
IMPROVEMENTS:
16+
17+
* Support FortiOS version 7.6.5;
18+
* Support unset operation for complex variables;
19+
* Support unset operation for variable options of resource webfilter_profile;
20+
* Add validation function to validate subnet;
21+
22+
FEATURES:
23+
24+
* **New Resource:** `fortios_system_sovsase`
25+
* **New Resource:** `fortios_wirelesscontroller_lwprofile`
26+
427
## 1.23.0 (Oct 02, 2025)
528
BUG FIXES:
629

fortios/config.go

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,3 +378,81 @@ func remove_quote(v interface{}) interface{} {
378378
func bZero(v interface{}) bool {
379379
return reflect.ValueOf(v).IsZero()
380380
}
381+
382+
func mergeBlock(tf_list, rsp_list []interface{}, tf_mkey, api_mkey string) []interface{} {
383+
result := []interface{}{}
384+
mkey_index_map := make(map[string]int)
385+
386+
// create mkey to index map
387+
for i, raw := range rsp_list {
388+
if raw == nil {
389+
continue
390+
}
391+
item := raw.(map[string]interface{})
392+
393+
keyStr := fmt.Sprintf("%v", item[api_mkey])
394+
mkey_index_map[keyStr] = i
395+
}
396+
397+
// parse item in terraform configuration
398+
zeroCount := 0
399+
for _, raw := range tf_list {
400+
if raw == nil {
401+
continue
402+
}
403+
item := raw.(map[string]interface{})
404+
405+
keyStr := fmt.Sprintf("%v", item[tf_mkey])
406+
407+
if rspIndex, ok := mkey_index_map[keyStr]; ok {
408+
rspItem := rsp_list[rspIndex].(map[string]interface{})
409+
rspItem["tf_exist"] = true
410+
result = append(result, rspItem)
411+
412+
delete(mkey_index_map, keyStr)
413+
} else {
414+
if keyStr == "0" {
415+
zeroCount += 1
416+
continue
417+
}
418+
emptyMap := map[string]interface{}{
419+
"tf_exist": true,
420+
}
421+
result = append(result, emptyMap)
422+
}
423+
}
424+
425+
// add items only in response
426+
for _, idx := range mkey_index_map {
427+
v := rsp_list[idx].(map[string]interface{})
428+
if zeroCount > 0 {
429+
v["tf_exist"] = true
430+
zeroCount -= 1
431+
} else {
432+
v["tf_exist"] = false
433+
}
434+
result = append(result, v)
435+
}
436+
437+
return result
438+
}
439+
440+
func isValidSubnet(i interface{}, k string) (warnings []string, errors []error) {
441+
value := i.(string)
442+
cidrValue := convertIP(value)
443+
ip, ipNet, err := net.ParseCIDR(cidrValue)
444+
if err != nil {
445+
errors = append(errors, fmt.Errorf(
446+
"Variable %q is not a valid subnet: %v", k, value,
447+
))
448+
return
449+
}
450+
// Check if IP equals the network base address
451+
if !ip.Equal(ipNet.IP) {
452+
warnings = append(warnings, fmt.Sprintf(
453+
"Variable %q is not a valid subnet: %v, do you mean %v?", k, value, ipNet,
454+
))
455+
return
456+
}
457+
return
458+
}

fortios/data_source_firewall_address.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,10 @@ func dataSourceFirewallAddress() *schema.Resource {
268268
Type: schema.TypeString,
269269
Computed: true,
270270
},
271+
"passive_fqdn_learning": &schema.Schema{
272+
Type: schema.TypeString,
273+
Computed: true,
274+
},
271275
"fabric_object": &schema.Schema{
272276
Type: schema.TypeString,
273277
Computed: true,
@@ -727,6 +731,10 @@ func dataSourceFlattenFirewallAddressAllowRouting(v interface{}, d *schema.Resou
727731
return v
728732
}
729733

734+
func dataSourceFlattenFirewallAddressPassiveFqdnLearning(v interface{}, d *schema.ResourceData, pre string) interface{} {
735+
return v
736+
}
737+
730738
func dataSourceFlattenFirewallAddressFabricObject(v interface{}, d *schema.ResourceData, pre string) interface{} {
731739
return v
732740
}
@@ -1010,6 +1018,12 @@ func dataSourceRefreshObjectFirewallAddress(d *schema.ResourceData, o map[string
10101018
}
10111019
}
10121020

1021+
if err = d.Set("passive_fqdn_learning", dataSourceFlattenFirewallAddressPassiveFqdnLearning(o["passive-fqdn-learning"], d, "passive_fqdn_learning")); err != nil {
1022+
if !fortiAPIPatch(o["passive-fqdn-learning"]) {
1023+
return fmt.Errorf("Error reading passive_fqdn_learning: %v", err)
1024+
}
1025+
}
1026+
10131027
if err = d.Set("fabric_object", dataSourceFlattenFirewallAddressFabricObject(o["fabric-object"], d, "fabric_object")); err != nil {
10141028
if !fortiAPIPatch(o["fabric-object"]) {
10151029
return fmt.Errorf("Error reading fabric_object: %v", err)

fortios/data_source_firewall_address6.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,10 @@ func dataSourceFirewallAddress6() *schema.Resource {
204204
Type: schema.TypeString,
205205
Computed: true,
206206
},
207+
"passive_fqdn_learning": &schema.Schema{
208+
Type: schema.TypeString,
209+
Computed: true,
210+
},
207211
"fabric_object": &schema.Schema{
208212
Type: schema.TypeString,
209213
Computed: true,
@@ -571,6 +575,10 @@ func dataSourceFlattenFirewallAddress6SdnAddrType(v interface{}, d *schema.Resou
571575
return v
572576
}
573577

578+
func dataSourceFlattenFirewallAddress6PassiveFqdnLearning(v interface{}, d *schema.ResourceData, pre string) interface{} {
579+
return v
580+
}
581+
574582
func dataSourceFlattenFirewallAddress6FabricObject(v interface{}, d *schema.ResourceData, pre string) interface{} {
575583
return v
576584
}
@@ -758,6 +766,12 @@ func dataSourceRefreshObjectFirewallAddress6(d *schema.ResourceData, o map[strin
758766
}
759767
}
760768

769+
if err = d.Set("passive_fqdn_learning", dataSourceFlattenFirewallAddress6PassiveFqdnLearning(o["passive-fqdn-learning"], d, "passive_fqdn_learning")); err != nil {
770+
if !fortiAPIPatch(o["passive-fqdn-learning"]) {
771+
return fmt.Errorf("Error reading passive_fqdn_learning: %v", err)
772+
}
773+
}
774+
761775
if err = d.Set("fabric_object", dataSourceFlattenFirewallAddress6FabricObject(o["fabric-object"], d, "fabric_object")); err != nil {
762776
if !fortiAPIPatch(o["fabric-object"]) {
763777
return fmt.Errorf("Error reading fabric_object: %v", err)

fortios/data_source_firewall_proxypolicy.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,18 @@ func dataSourceFirewallProxyPolicy() *schema.Resource {
128128
},
129129
},
130130
},
131+
"poolname6": &schema.Schema{
132+
Type: schema.TypeList,
133+
Computed: true,
134+
Elem: &schema.Resource{
135+
Schema: map[string]*schema.Schema{
136+
"name": &schema.Schema{
137+
Type: schema.TypeString,
138+
Computed: true,
139+
},
140+
},
141+
},
142+
},
131143
"dstaddr": &schema.Schema{
132144
Type: schema.TypeList,
133145
Computed: true,
@@ -919,6 +931,42 @@ func dataSourceFlattenFirewallProxyPolicyPoolnameName(v interface{}, d *schema.R
919931
return v
920932
}
921933

934+
func dataSourceFlattenFirewallProxyPolicyPoolname6(v interface{}, d *schema.ResourceData, pre string) []map[string]interface{} {
935+
if v == nil {
936+
return nil
937+
}
938+
939+
l := v.([]interface{})
940+
if len(l) == 0 || l[0] == nil {
941+
return nil
942+
}
943+
944+
result := make([]map[string]interface{}, 0, len(l))
945+
946+
con := 0
947+
for _, r := range l {
948+
tmp := make(map[string]interface{})
949+
i := r.(map[string]interface{})
950+
951+
pre_append := "" // table
952+
953+
pre_append = pre + "." + strconv.Itoa(con) + "." + "name"
954+
if _, ok := i["name"]; ok {
955+
tmp["name"] = dataSourceFlattenFirewallProxyPolicyPoolname6Name(i["name"], d, pre_append)
956+
}
957+
958+
result = append(result, tmp)
959+
960+
con += 1
961+
}
962+
963+
return result
964+
}
965+
966+
func dataSourceFlattenFirewallProxyPolicyPoolname6Name(v interface{}, d *schema.ResourceData, pre string) interface{} {
967+
return v
968+
}
969+
922970
func dataSourceFlattenFirewallProxyPolicyDstaddr(v interface{}, d *schema.ResourceData, pre string) []map[string]interface{} {
923971
if v == nil {
924972
return nil
@@ -1920,6 +1968,12 @@ func dataSourceRefreshObjectFirewallProxyPolicy(d *schema.ResourceData, o map[st
19201968
}
19211969
}
19221970

1971+
if err = d.Set("poolname6", dataSourceFlattenFirewallProxyPolicyPoolname6(o["poolname6"], d, "poolname6")); err != nil {
1972+
if !fortiAPIPatch(o["poolname6"]) {
1973+
return fmt.Errorf("Error reading poolname6: %v", err)
1974+
}
1975+
}
1976+
19231977
if err = d.Set("dstaddr", dataSourceFlattenFirewallProxyPolicyDstaddr(o["dstaddr"], d, "dstaddr")); err != nil {
19241978
if !fortiAPIPatch(o["dstaddr"]) {
19251979
return fmt.Errorf("Error reading dstaddr: %v", err)

fortios/data_source_firewallschedule_recurring.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ func dataSourceFirewallScheduleRecurring() *schema.Resource {
4848
Type: schema.TypeString,
4949
Computed: true,
5050
},
51+
"label_day": &schema.Schema{
52+
Type: schema.TypeString,
53+
Computed: true,
54+
},
5155
"color": &schema.Schema{
5256
Type: schema.TypeInt,
5357
Computed: true,
@@ -123,6 +127,10 @@ func dataSourceFlattenFirewallScheduleRecurringDay(v interface{}, d *schema.Reso
123127
return v
124128
}
125129

130+
func dataSourceFlattenFirewallScheduleRecurringLabelDay(v interface{}, d *schema.ResourceData, pre string) interface{} {
131+
return v
132+
}
133+
126134
func dataSourceFlattenFirewallScheduleRecurringColor(v interface{}, d *schema.ResourceData, pre string) interface{} {
127135
return v
128136
}
@@ -164,6 +172,12 @@ func dataSourceRefreshObjectFirewallScheduleRecurring(d *schema.ResourceData, o
164172
}
165173
}
166174

175+
if err = d.Set("label_day", dataSourceFlattenFirewallScheduleRecurringLabelDay(o["label-day"], d, "label_day")); err != nil {
176+
if !fortiAPIPatch(o["label-day"]) {
177+
return fmt.Errorf("Error reading label_day: %v", err)
178+
}
179+
}
180+
167181
if err = d.Set("color", dataSourceFlattenFirewallScheduleRecurringColor(o["color"], d, "color")); err != nil {
168182
if !fortiAPIPatch(o["color"]) {
169183
return fmt.Errorf("Error reading color: %v", err)

fortios/data_source_router_routemap.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ func dataSourceRouterRouteMap() *schema.Resource {
109109
Type: schema.TypeInt,
110110
Computed: true,
111111
},
112+
"match_suppress": &schema.Schema{
113+
Type: schema.TypeString,
114+
Computed: true,
115+
},
112116
"set_aggregator_as": &schema.Schema{
113117
Type: schema.TypeInt,
114118
Computed: true,
@@ -435,6 +439,11 @@ func dataSourceFlattenRouterRouteMapRule(v interface{}, d *schema.ResourceData,
435439
tmp["match_vrf"] = dataSourceFlattenRouterRouteMapRuleMatchVrf(i["match-vrf"], d, pre_append)
436440
}
437441

442+
pre_append = pre + "." + strconv.Itoa(con) + "." + "match_suppress"
443+
if _, ok := i["match-suppress"]; ok {
444+
tmp["match_suppress"] = dataSourceFlattenRouterRouteMapRuleMatchSuppress(i["match-suppress"], d, pre_append)
445+
}
446+
438447
pre_append = pre + "." + strconv.Itoa(con) + "." + "set_aggregator_as"
439448
if _, ok := i["set-aggregator-as"]; ok {
440449
tmp["set_aggregator_as"] = dataSourceFlattenRouterRouteMapRuleSetAggregatorAs(i["set-aggregator-as"], d, pre_append)
@@ -676,6 +685,10 @@ func dataSourceFlattenRouterRouteMapRuleMatchVrf(v interface{}, d *schema.Resour
676685
return v
677686
}
678687

688+
func dataSourceFlattenRouterRouteMapRuleMatchSuppress(v interface{}, d *schema.ResourceData, pre string) interface{} {
689+
return v
690+
}
691+
679692
func dataSourceFlattenRouterRouteMapRuleSetAggregatorAs(v interface{}, d *schema.ResourceData, pre string) interface{} {
680693
return v
681694
}

0 commit comments

Comments
 (0)