Skip to content
This repository was archived by the owner on Jan 11, 2023. It is now read-only.

Commit

Permalink
Merge pull request #2327 from JunSun17/cni-upgrade-issue
Browse files Browse the repository at this point in the history
Addressing upgrade issues against v0.12.0 and v0.13.0 clusters.
  • Loading branch information
JunSun17 authored Feb 28, 2018
2 parents 382c417 + 93c99d1 commit b550578
Show file tree
Hide file tree
Showing 8 changed files with 33 additions and 29 deletions.
2 changes: 1 addition & 1 deletion cmd/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ func (dc *deployCmd) run() error {
log.Fatalln("failed to initialize template generator: %s", err.Error())
}

template, parameters, certsgenerated, err := templateGenerator.GenerateTemplate(dc.containerService, acsengine.DefaultGeneratorCode)
template, parameters, certsgenerated, err := templateGenerator.GenerateTemplate(dc.containerService, acsengine.DefaultGeneratorCode, false)
if err != nil {
log.Fatalf("error generating template %s: %s", dc.apimodelPath, err.Error())
os.Exit(1)
Expand Down
2 changes: 1 addition & 1 deletion cmd/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ func (gc *generateCmd) run() error {
log.Fatalln("failed to initialize template generator: %s", err.Error())
}

template, parameters, certsGenerated, err := templateGenerator.GenerateTemplate(gc.containerService, acsengine.DefaultGeneratorCode)
template, parameters, certsGenerated, err := templateGenerator.GenerateTemplate(gc.containerService, acsengine.DefaultGeneratorCode, false)
if err != nil {
log.Fatalf("error generating template %s: %s", gc.apimodelPath, err.Error())
os.Exit(1)
Expand Down
2 changes: 1 addition & 1 deletion cmd/scale.go
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ func (sc *scaleCmd) run(cmd *cobra.Command, args []string) error {

sc.containerService.Properties.AgentPoolProfiles = []*api.AgentPoolProfile{sc.agentPool}

template, parameters, _, err := templateGenerator.GenerateTemplate(sc.containerService, acsengine.DefaultGeneratorCode)
template, parameters, _, err := templateGenerator.GenerateTemplate(sc.containerService, acsengine.DefaultGeneratorCode, false)
if err != nil {
log.Fatalf("error generating template %s: %s", sc.apiModelPath, err.Error())
os.Exit(1)
Expand Down
26 changes: 19 additions & 7 deletions pkg/acsengine/defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -239,12 +239,12 @@ var (
)

// SetPropertiesDefaults for the container Properties, returns true if certs are generated
func SetPropertiesDefaults(cs *api.ContainerService) (bool, error) {
func SetPropertiesDefaults(cs *api.ContainerService, isUpgrade bool) (bool, error) {
properties := cs.Properties

setOrchestratorDefaults(cs)

setMasterNetworkDefaults(properties)
setMasterNetworkDefaults(properties, isUpgrade)

setHostedMasterNetworkDefaults(properties)

Expand Down Expand Up @@ -456,7 +456,7 @@ func setHostedMasterNetworkDefaults(a *api.Properties) {
}

// SetMasterNetworkDefaults for masters
func setMasterNetworkDefaults(a *api.Properties) {
func setMasterNetworkDefaults(a *api.Properties, isUpgrade bool) {
if a.MasterProfile == nil {
return
}
Expand All @@ -471,17 +471,29 @@ func setMasterNetworkDefaults(a *api.Properties) {
if a.OrchestratorProfile.IsAzureCNI() {
// When VNET integration is enabled, all masters, agents and pods share the same large subnet.
a.MasterProfile.Subnet = a.OrchestratorProfile.KubernetesConfig.ClusterSubnet
a.MasterProfile.FirstConsecutiveStaticIP = getFirstConsecutiveStaticIPAddress(a.MasterProfile.Subnet)
// FirstConsecutiveStaticIP is not reset if it is upgrade and some value already exists
if !isUpgrade || len(a.MasterProfile.FirstConsecutiveStaticIP) == 0 {
a.MasterProfile.FirstConsecutiveStaticIP = getFirstConsecutiveStaticIPAddress(a.MasterProfile.Subnet)
}
} else {
a.MasterProfile.Subnet = DefaultKubernetesMasterSubnet
a.MasterProfile.FirstConsecutiveStaticIP = DefaultFirstConsecutiveKubernetesStaticIP
// FirstConsecutiveStaticIP is not reset if it is upgrade and some value already exists
if !isUpgrade || len(a.MasterProfile.FirstConsecutiveStaticIP) == 0 {
a.MasterProfile.FirstConsecutiveStaticIP = DefaultFirstConsecutiveKubernetesStaticIP
}
}
} else if a.HasWindows() {
a.MasterProfile.Subnet = DefaultSwarmWindowsMasterSubnet
a.MasterProfile.FirstConsecutiveStaticIP = DefaultSwarmWindowsFirstConsecutiveStaticIP
// FirstConsecutiveStaticIP is not reset if it is upgrade and some value already exists
if !isUpgrade || len(a.MasterProfile.FirstConsecutiveStaticIP) == 0 {
a.MasterProfile.FirstConsecutiveStaticIP = DefaultSwarmWindowsFirstConsecutiveStaticIP
}
} else {
a.MasterProfile.Subnet = DefaultMasterSubnet
a.MasterProfile.FirstConsecutiveStaticIP = DefaultFirstConsecutiveStaticIP
// FirstConsecutiveStaticIP is not reset if it is upgrade and some value already exists
if !isUpgrade || len(a.MasterProfile.FirstConsecutiveStaticIP) == 0 {
a.MasterProfile.FirstConsecutiveStaticIP = DefaultFirstConsecutiveStaticIP
}
}
}

Expand Down
4 changes: 2 additions & 2 deletions pkg/acsengine/engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ func InitializeTemplateGenerator(ctx Context, classicMode bool) (*TemplateGenera
}

// GenerateTemplate generates the template from the API Model
func (t *TemplateGenerator) GenerateTemplate(containerService *api.ContainerService, generatorCode string) (templateRaw string, parametersRaw string, certsGenerated bool, err error) {
func (t *TemplateGenerator) GenerateTemplate(containerService *api.ContainerService, generatorCode string, isUpgrade bool) (templateRaw string, parametersRaw string, certsGenerated bool, err error) {
// named return values are used in order to set err in case of a panic
templateRaw = ""
parametersRaw = ""
Expand All @@ -210,7 +210,7 @@ func (t *TemplateGenerator) GenerateTemplate(containerService *api.ContainerServ
defer func() {
properties.OrchestratorProfile.OrchestratorVersion = orchVersion
}()
if certsGenerated, err = SetPropertiesDefaults(containerService); err != nil {
if certsGenerated, err = SetPropertiesDefaults(containerService, isUpgrade); err != nil {
return templateRaw, parametersRaw, certsGenerated, err
}

Expand Down
6 changes: 3 additions & 3 deletions pkg/acsengine/engine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ func TestExpected(t *testing.T) {
continue
}

armTemplate, params, certsGenerated, err := templateGenerator.GenerateTemplate(containerService, DefaultGeneratorCode)
armTemplate, params, certsGenerated, err := templateGenerator.GenerateTemplate(containerService, DefaultGeneratorCode, false)
if err != nil {
t.Error(fmt.Errorf("error in file %s: %s", tuple.APIModelFilename, err.Error()))
continue
Expand All @@ -99,7 +99,7 @@ func TestExpected(t *testing.T) {
}

for i := 0; i < 3; i++ {
armTemplate, params, certsGenerated, err := templateGenerator.GenerateTemplate(containerService, DefaultGeneratorCode)
armTemplate, params, certsGenerated, err := templateGenerator.GenerateTemplate(containerService, DefaultGeneratorCode, false)
if err != nil {
t.Error(fmt.Errorf("error in file %s: %s", tuple.APIModelFilename, err.Error()))
continue
Expand Down Expand Up @@ -292,7 +292,7 @@ func TestTemplateOutputPresence(t *testing.T) {
if err != nil {
t.Fatalf("Failed to load container service from file: %v", err)
}
armTemplate, _, _, err := templateGenerator.GenerateTemplate(containerService, DefaultGeneratorCode)
armTemplate, _, _, err := templateGenerator.GenerateTemplate(containerService, DefaultGeneratorCode, false)
if err != nil {
t.Fatalf("Failed to generate arm template: %v", err)
}
Expand Down
18 changes: 5 additions & 13 deletions pkg/acsengine/transform/transform.go
Original file line number Diff line number Diff line change
Expand Up @@ -297,21 +297,13 @@ func (t *Transformer) NormalizeResourcesForK8sMasterUpgrade(logger *logrus.Entry
if strings.Contains(resourceName, "variables('masterVMNamePrefix')") {
continue
} else {
// agent NICs remove depends on master NICs.
dependsOn := resourceMap[dependsOnFieldName].([]interface{})
var newDependsOn []interface{}
for _, depResource := range dependsOn {
dep, ok := depResource.(string)
if !ok {
logger.Warnf("Template improperly formatted for field name: %s", dependsOnFieldName)
continue
}

if !strings.Contains(dep, "variables('masterNICNamePrefix')") {
newDependsOn = append(newDependsOn, depResource)
// Remove agent NICs if upgrade master nodes
if agentPoolsToPreserve == nil {
logger.Infoln(fmt.Sprintf("Removing nic: %s from template", resourceName))
if len(filteredResources) > 0 {
filteredResources = filteredResources[:len(filteredResources)-1]
}
}
resourceMap[dependsOnFieldName] = newDependsOn
continue
}
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/operations/kubernetesupgrade/upgrader.go
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,7 @@ func (ku *Upgrader) generateUpgradeTemplate(upgradeContainerService *api.Contain

var templateJSON string
var parametersJSON string
if templateJSON, parametersJSON, _, err = templateGenerator.GenerateTemplate(upgradeContainerService, acsengine.DefaultGeneratorCode); err != nil {
if templateJSON, parametersJSON, _, err = templateGenerator.GenerateTemplate(upgradeContainerService, acsengine.DefaultGeneratorCode, true); err != nil {
return nil, nil, ku.Translator.Errorf("error generating upgrade template: %s", err.Error())
}

Expand Down

0 comments on commit b550578

Please sign in to comment.