Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/jujuPublic

Commit5841c21

Browse files
committed
fix: application's creation config type
validateCreateApplicationArgs was validating and mutating thearg.ApplicationConfig, however we were passing arg as a value and notreturning the mutated struct. This caused a bug becausemakeApplicationArg relies on the arg.ApplicationConfig to have the rightgo type to create the Config struct. Now the validate function returnsthe mutated arg.
1 parentbca04aa commit5841c21

File tree

2 files changed

+137
-12
lines changed

2 files changed

+137
-12
lines changed

‎domain/application/service/provider.go‎

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,8 @@ func (s *ProviderService) makeIAASApplicationArg(ctx context.Context,
589589
argsAddApplicationArgs,
590590
units...AddIAASUnitArg,
591591
) (string, application.AddIAASApplicationArg, []application.AddIAASUnitArg,error) {
592-
iferr:=s.validateCreateApplicationArgs(ctx,name,charm,origin,args);err!=nil {
592+
varerrerror
593+
ifargs,err=s.validateCreateApplicationArgs(ctx,name,charm,origin,args);err!=nil {
593594
return"", application.AddIAASApplicationArg{},nil,
594595
errors.Errorf("validating create application args: %w",err)
595596
}
@@ -656,7 +657,8 @@ func (s *ProviderService) makeCAASApplicationArg(
656657
argsAddApplicationArgs,
657658
units...AddUnitArg,
658659
) (string, application.AddCAASApplicationArg, []application.AddCAASUnitArg,error) {
659-
iferr:=s.validateCreateApplicationArgs(ctx,name,charm,origin,args);err!=nil {
660+
varerrerror
661+
ifargs,err=s.validateCreateApplicationArgs(ctx,name,charm,origin,args);err!=nil {
660662
return"", application.AddCAASApplicationArg{},nil,
661663
errors.Errorf("validating create application args: %w",err)
662664
}
@@ -713,19 +715,19 @@ func (s *ProviderService) validateCreateApplicationArgs(
713715
charm internalcharm.Charm,
714716
origin corecharm.Origin,
715717
argsAddApplicationArgs,
716-
)error {
718+
)(AddApplicationArgs,error) {
717719
iferr:=validateCharmAndApplicationParams(
718720
name,
719721
args.ReferenceName,
720722
charm,
721723
origin,
722724
);err!=nil {
723-
returnerrors.Errorf("invalid application args: %w",err)
725+
returnAddApplicationArgs{},errors.Errorf("invalid application args: %w",err)
724726
}
725727

726728
err:=s.storageService.ValidateCharmStorage(ctx,charm.Meta().Storage)
727729
iferr!=nil {
728-
returnerrors.Errorf("invalid charm storage: %w",err)
730+
returnAddApplicationArgs{},errors.Errorf("invalid charm storage: %w",err)
729731
}
730732

731733
err=s.storageService.ValidateApplicationStorageDirectiveOverrides(
@@ -734,29 +736,29 @@ func (s *ProviderService) validateCreateApplicationArgs(
734736
args.StorageDirectiveOverrides,
735737
)
736738
iferr!=nil {
737-
returnerrors.Errorf(
739+
returnAddApplicationArgs{},errors.Errorf(
738740
"invalid storage directive overrides: %w",err,
739741
)
740742
}
741743

742744
iferr:=validateDownloadInfoParams(origin.Source,args.DownloadInfo);err!=nil {
743-
returnerrors.Errorf("invalid application args: %w",err)
745+
returnAddApplicationArgs{},errors.Errorf("invalid application args: %w",err)
744746
}
745747

746748
iferr:=validateCreateApplicationResourceParams(charm,args.ResolvedResources,args.PendingResources);err!=nil {
747-
returnerrors.Errorf("create application: %w",err)
749+
returnAddApplicationArgs{},errors.Errorf("create application: %w",err)
748750
}
749751

750752
iferr:=validateDeviceConstraints(args.Devices,charm.Meta());err!=nil {
751-
returnerrors.Errorf("validating device constraints: %w",err)
753+
returnAddApplicationArgs{},errors.Errorf("validating device constraints: %w",err)
752754
}
753755

754756
// ValidateApplicationConfig also coerces config values to the correct type
755757
ifargs.ApplicationConfig,err=charm.Config().ValidateApplicationConfig(args.ApplicationConfig);err!=nil {
756-
returnerrors.Errorf("validating application config: %w",err)
758+
returnAddApplicationArgs{},errors.Errorf("validating application config: %w",err)
757759
}
758760

759-
returnnil
761+
returnargs,nil
760762
}
761763

762764
func (s*ProviderService)makeApplicationArg(
@@ -944,7 +946,6 @@ func makeCreateApplicationArgs(
944946
iferr!=nil {
945947
return application.BaseAddApplicationArg{},errors.Errorf("encoding charm origin: %w",err)
946948
}
947-
948949
applicationConfig,err:=application.EncodeApplicationConfig(args.ApplicationConfig,ch.Config)
949950
iferr!=nil {
950951
return application.BaseAddApplicationArg{},errors.Errorf("encoding application config: %w",err)

‎domain/application/service/provider_test.go‎

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,130 @@ func (s *providerServiceSuite) TestCreateIAASApplication(c *tc.C) {
387387
c.Assert(err,tc.ErrorIsNil)
388388
}
389389

390+
func (s*providerServiceSuite)TestCreateIAASApplicationWithConfig(c*tc.C) {
391+
defers.setupMocks(c).Finish()
392+
setCreateApplicationNoopStorageExpects(s.storageService)
393+
394+
id:=tc.Must(c,coreapplication.NewUUID)
395+
objectStoreUUID:=objectstoretesting.GenObjectStoreUUID(c)
396+
397+
option:=make(map[string]applicationcharm.Option)
398+
option["foo"]= applicationcharm.Option{
399+
Type:"int",
400+
Description:"foo option",
401+
Default:0,
402+
}
403+
ch:= applicationcharm.Charm{
404+
Metadata: applicationcharm.Metadata{
405+
Name:"ubuntu",
406+
RunAs:"default",
407+
},
408+
Manifest:s.minimalManifest(),
409+
ReferenceName:"ubuntu",
410+
Source:applicationcharm.CharmHubSource,
411+
Revision:42,
412+
Architecture:architecture.ARM64,
413+
ObjectStoreUUID:objectStoreUUID,
414+
Config: applicationcharm.Config{
415+
Options:option,
416+
},
417+
}
418+
platform:= deployment.Platform{
419+
Channel:"24.04",
420+
OSType:deployment.Ubuntu,
421+
Architecture:architecture.ARM64,
422+
}
423+
424+
app:= application.AddIAASApplicationArg{
425+
BaseAddApplicationArg: application.BaseAddApplicationArg{
426+
Charm:ch,
427+
CharmDownloadInfo:&applicationcharm.DownloadInfo{
428+
Provenance:applicationcharm.ProvenanceDownload,
429+
CharmhubIdentifier:"foo",
430+
DownloadURL:"https://example.com/foo",
431+
DownloadSize:42,
432+
},
433+
Platform:platform,
434+
Constraints: constraints.Constraints{
435+
CpuCores:ptr(uint64(4)),
436+
CpuPower:ptr(uint64(75)),
437+
Arch:ptr("arm64"),
438+
},
439+
Config:map[string]application.AddApplicationConfig{
440+
"foo": {
441+
Value:"3",
442+
Type:applicationcharm.OptionInt,
443+
},
444+
},
445+
},
446+
}
447+
448+
s.state.EXPECT().GetModelConstraints(gomock.Any()).Return(constraints.Constraints{},nil)
449+
s.provider.EXPECT().ConstraintsValidator(gomock.Any()).Return(coreconstraints.NewValidator(),nil)
450+
s.provider.EXPECT().PrecheckInstance(gomock.Any(), environs.PrecheckInstanceParams{
451+
Constraints:coreconstraints.MustParse("cores=4 cpu-power=75 arch=arm64"),
452+
Base: corebase.Base{
453+
OS:"ubuntu",
454+
Channel: corebase.Channel{
455+
Track:"24.04",
456+
},
457+
},
458+
Placement:"zone=default",
459+
}).Return(nil)
460+
461+
s.state.EXPECT().CreateIAASApplication(gomock.Any(),"ubuntu",app,gomock.Any()).Return(id,nil,nil)
462+
options:=make(map[string]charm.Option)
463+
options["foo"]= charm.Option{
464+
Type:"int",
465+
Description:"foo option",
466+
Default:0,
467+
}
468+
s.charm.EXPECT().Actions().Return(&charm.Actions{})
469+
s.charm.EXPECT().Config().Return(&charm.ConfigSpec{
470+
Options:options,
471+
}).MinTimes(1)
472+
s.charm.EXPECT().Manifest().Return(&charm.Manifest{
473+
Bases: []charm.Base{
474+
{
475+
Name:"ubuntu",
476+
Channel: charm.Channel{
477+
Risk:charm.Stable,
478+
},
479+
Architectures: []string{"amd64"},
480+
},
481+
},
482+
}).MinTimes(1)
483+
s.charm.EXPECT().Meta().Return(&charm.Meta{
484+
Name:"ubuntu",
485+
}).MinTimes(1)
486+
_,err:=s.service.CreateIAASApplication(c.Context(),"ubuntu",s.charm, corecharm.Origin{
487+
Source:corecharm.CharmHub,
488+
Platform:corecharm.MustParsePlatform("arm64/ubuntu/24.04"),
489+
Revision:ptr(42),
490+
},AddApplicationArgs{
491+
ReferenceName:"ubuntu",
492+
DownloadInfo:&applicationcharm.DownloadInfo{
493+
Provenance:applicationcharm.ProvenanceDownload,
494+
CharmhubIdentifier:"foo",
495+
DownloadURL:"https://example.com/foo",
496+
DownloadSize:42,
497+
},
498+
CharmObjectStoreUUID:objectStoreUUID,
499+
Constraints:coreconstraints.MustParse("arch=arm64 cores=4 cpu-power=75"),
500+
ApplicationConfig: charm.Config{
501+
"foo":"3",
502+
},
503+
},AddIAASUnitArg{
504+
AddUnitArg:AddUnitArg{
505+
Placement:&instance.Placement{
506+
Scope:instance.ModelScope,
507+
Directive:"zone=default",
508+
},
509+
},
510+
})
511+
c.Assert(err,tc.ErrorIsNil)
512+
}
513+
390514
func (s*providerServiceSuite)TestCreateIAASApplicationMachineScope(c*tc.C) {
391515
defers.setupMocks(c).Finish()
392516
setCreateApplicationNoopStorageExpects(s.storageService)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp