diff --git a/pkg/model/master_volumes.go b/pkg/model/master_volumes.go index b6132aa44d..9a86185946 100644 --- a/pkg/model/master_volumes.go +++ b/pkg/model/master_volumes.go @@ -114,7 +114,10 @@ func (b *MasterVolumeBuilder) Build(c *fi.ModelBuilderContext) error { return err } case kops.CloudProviderAzure: - b.addAzureVolume(c, name, volumeSize, zone, etcd, m, allMembers) + err = b.addAzureVolume(c, name, volumeSize, zone, etcd, m, allMembers) + if err != nil { + return err + } default: return fmt.Errorf("unknown cloudprovider %q", b.Cluster.Spec.GetCloudProvider()) } @@ -347,7 +350,7 @@ func (b *MasterVolumeBuilder) addAzureVolume( etcd kops.EtcdClusterSpec, m kops.EtcdMemberSpec, allMembers []string, -) { +) error { // The tags are use by Protokube to mount the volume and use it for etcd. tags := map[string]*string{ // This is the configuration of the etcd cluster. @@ -365,7 +368,12 @@ func (b *MasterVolumeBuilder) addAzureVolume( tags[k] = fi.String(v) } - // TODO(kenji): Respect zone and m.EncryptedVolume. + zoneNumber, err := azure.ZoneToAvailabilityZoneNumber(zone) + if err != nil { + return err + } + + // TODO(kenji): Respect m.EncryptedVolume. t := &azuretasks.Disk{ Name: fi.String(name), Lifecycle: b.Lifecycle, @@ -375,6 +383,9 @@ func (b *MasterVolumeBuilder) addAzureVolume( }, SizeGB: fi.Int32(volumeSize), Tags: tags, + Zones: &[]string{zoneNumber}, } c.AddTask(t) + + return nil } diff --git a/upup/pkg/fi/cloudup/azuretasks/disk.go b/upup/pkg/fi/cloudup/azuretasks/disk.go index 43799c430a..b2f4f395f6 100644 --- a/upup/pkg/fi/cloudup/azuretasks/disk.go +++ b/upup/pkg/fi/cloudup/azuretasks/disk.go @@ -35,6 +35,7 @@ type Disk struct { ResourceGroup *ResourceGroup SizeGB *int32 Tags map[string]*string + Zones *[]string } var ( @@ -74,6 +75,7 @@ func (d *Disk) Find(c *fi.Context) (*Disk, error) { }, SizeGB: found.DiskSizeGB, Tags: found.Tags, + Zones: found.Zones, }, nil } @@ -121,7 +123,8 @@ func (*Disk) RenderAzure(t *azure.AzureAPITarget, a, e, changes *Disk) error { }, DiskSizeGB: e.SizeGB, }, - Tags: e.Tags, + Tags: e.Tags, + Zones: e.Zones, } return t.Cloud.Disk().CreateOrUpdate(