@ -153,6 +153,33 @@ func resourceSqlDatabaseInstance() *schema.Resource {
} ,
} ,
} ,
"maintenance_window" : & schema . Schema {
Type : schema . TypeList ,
Optional : true ,
MaxItems : 1 ,
Elem : & schema . Resource {
Schema : map [ string ] * schema . Schema {
"day" : & schema . Schema {
Type : schema . TypeInt ,
Optional : true ,
ValidateFunc : func ( v interface { } , k string ) ( ws [ ] string , errors [ ] error ) {
return validateNumericRange ( v , k , 1 , 7 )
} ,
} ,
"hour" : & schema . Schema {
Type : schema . TypeInt ,
Optional : true ,
ValidateFunc : func ( v interface { } , k string ) ( ws [ ] string , errors [ ] error ) {
return validateNumericRange ( v , k , 0 , 23 )
} ,
} ,
"update_track" : & schema . Schema {
Type : schema . TypeString ,
Optional : true ,
} ,
} ,
} ,
} ,
"pricing_plan" : & schema . Schema {
Type : schema . TypeString ,
Optional : true ,
@ -431,6 +458,25 @@ func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{})
}
}
if v , ok := _settings [ "maintenance_window" ] ; ok && len ( v . ( [ ] interface { } ) ) > 0 {
settings . MaintenanceWindow = & sqladmin . MaintenanceWindow { }
_maintenanceWindow := v . ( [ ] interface { } ) [ 0 ] . ( map [ string ] interface { } )
if vp , okp := _maintenanceWindow [ "day" ] ; okp {
settings . MaintenanceWindow . Day = int64 ( vp . ( int ) )
}
if vp , okp := _maintenanceWindow [ "hour" ] ; okp {
settings . MaintenanceWindow . Hour = int64 ( vp . ( int ) )
}
if vp , ok := _maintenanceWindow [ "update_track" ] ; ok {
if len ( vp . ( string ) ) > 0 {
settings . MaintenanceWindow . UpdateTrack = vp . ( string )
}
}
}
if v , ok := _settings [ "pricing_plan" ] ; ok {
settings . PricingPlan = v . ( string )
}
@ -745,6 +791,25 @@ func resourceSqlDatabaseInstanceRead(d *schema.ResourceData, meta interface{}) e
}
}
if v , ok := _settings [ "maintenance_window" ] ; ok && len ( v . ( [ ] interface { } ) ) > 0 &&
settings . MaintenanceWindow != nil {
_maintenanceWindow := v . ( [ ] interface { } ) [ 0 ] . ( map [ string ] interface { } )
if vp , okp := _maintenanceWindow [ "day" ] ; okp && vp != nil {
_maintenanceWindow [ "day" ] = settings . MaintenanceWindow . Day
}
if vp , okp := _maintenanceWindow [ "hour" ] ; okp && vp != nil {
_maintenanceWindow [ "hour" ] = settings . MaintenanceWindow . Hour
}
if vp , ok := _maintenanceWindow [ "update_track" ] ; ok && vp != nil {
if len ( vp . ( string ) ) > 0 {
_maintenanceWindow [ "update_track" ] = settings . MaintenanceWindow . UpdateTrack
}
}
}
if v , ok := _settings [ "pricing_plan" ] ; ok && len ( v . ( string ) ) > 0 {
_settings [ "pricing_plan" ] = settings . PricingPlan
}
@ -1062,6 +1127,25 @@ func resourceSqlDatabaseInstanceUpdate(d *schema.ResourceData, meta interface{})
}
}
if v , ok := _settings [ "maintenance_window" ] ; ok && len ( v . ( [ ] interface { } ) ) > 0 {
settings . MaintenanceWindow = & sqladmin . MaintenanceWindow { }
_maintenanceWindow := v . ( [ ] interface { } ) [ 0 ] . ( map [ string ] interface { } )
if vp , okp := _maintenanceWindow [ "day" ] ; okp {
settings . MaintenanceWindow . Day = int64 ( vp . ( int ) )
}
if vp , okp := _maintenanceWindow [ "hour" ] ; okp {
settings . MaintenanceWindow . Hour = int64 ( vp . ( int ) )
}
if vp , ok := _maintenanceWindow [ "update_track" ] ; ok {
if len ( vp . ( string ) ) > 0 {
settings . MaintenanceWindow . UpdateTrack = vp . ( string )
}
}
}
if v , ok := _settings [ "pricing_plan" ] ; ok {
settings . PricingPlan = v . ( string )
}
@ -1109,3 +1193,12 @@ func resourceSqlDatabaseInstanceDelete(d *schema.ResourceData, meta interface{})
return nil
}
func validateNumericRange ( v interface { } , k string , min int , max int ) ( ws [ ] string , errors [ ] error ) {
value := v . ( int )
if min > value || value > max {
errors = append ( errors , fmt . Errorf (
"%q outside range %d-%d." , k , min , max ) )
}
return
}