@@ -3,6 +3,7 @@ package models
3
3
import (
4
4
bytes "bytes"
5
5
"encoding/json"
6
+ "errors"
6
7
"net/url"
7
8
"regexp"
8
9
"time"
@@ -13,6 +14,8 @@ import (
13
14
const PreloadedRootFSScheme = "preloaded"
14
15
const PreloadedOCIRootFSScheme = "preloaded+layer"
15
16
17
+ const volumeMountedFilesMaxAllowedSize = 1 * 1024 * 1024 // 1MB in bytes
18
+
16
19
var processGuidPattern = regexp .MustCompile (`^[a-zA-Z0-9_-]+$` )
17
20
18
21
type DesiredLRPChange struct {
@@ -38,6 +41,9 @@ func NewDesiredLRP(schedInfo DesiredLRPSchedulingInfo, runInfo DesiredLRPRunInfo
38
41
environmentVariables [i ] = & runInfo .EnvironmentVariables [i ]
39
42
}
40
43
44
+ volumeMountedFiles := make ([]* File , len (runInfo .VolumeMountedFiles ))
45
+ copy (volumeMountedFiles , runInfo .VolumeMountedFiles )
46
+
41
47
egressRules := make ([]* SecurityGroupRule , len (runInfo .EgressRules ))
42
48
for i := range runInfo .EgressRules {
43
49
egressRules [i ] = & runInfo .EgressRules [i ]
@@ -80,6 +86,7 @@ func NewDesiredLRP(schedInfo DesiredLRPSchedulingInfo, runInfo DesiredLRPRunInfo
80
86
MetricTags : metricTags ,
81
87
Sidecars : runInfo .Sidecars ,
82
88
LogRateLimit : runInfo .LogRateLimit ,
89
+ VolumeMountedFiles : volumeMountedFiles ,
83
90
}
84
91
}
85
92
@@ -89,6 +96,9 @@ func (desiredLRP *DesiredLRP) AddRunInfo(runInfo DesiredLRPRunInfo) {
89
96
environmentVariables [i ] = & runInfo .EnvironmentVariables [i ]
90
97
}
91
98
99
+ volumeMountedFiles := make ([]* File , len (runInfo .VolumeMountedFiles ))
100
+ copy (volumeMountedFiles , runInfo .VolumeMountedFiles )
101
+
92
102
egressRules := make ([]* SecurityGroupRule , len (runInfo .EgressRules ))
93
103
for i := range runInfo .EgressRules {
94
104
egressRules [i ] = & runInfo .EgressRules [i ]
@@ -111,6 +121,7 @@ func (desiredLRP *DesiredLRP) AddRunInfo(runInfo DesiredLRPRunInfo) {
111
121
desiredLRP .VolumeMounts = runInfo .VolumeMounts
112
122
desiredLRP .Network = runInfo .Network
113
123
desiredLRP .CheckDefinition = runInfo .CheckDefinition
124
+ desiredLRP .VolumeMountedFiles = volumeMountedFiles
114
125
}
115
126
116
127
func (* DesiredLRP ) Version () format.Version {
@@ -266,6 +277,9 @@ func (d *DesiredLRP) DesiredLRPRunInfo(createdAt time.Time) DesiredLRPRunInfo {
266
277
environmentVariables [i ] = * d .EnvironmentVariables [i ]
267
278
}
268
279
280
+ volumeMountedFiles := make ([]* File , len (d .VolumeMountedFiles ))
281
+ copy (volumeMountedFiles , d .VolumeMountedFiles )
282
+
269
283
egressRules := make ([]SecurityGroupRule , len (d .EgressRules ))
270
284
for i := range d .EgressRules {
271
285
egressRules [i ] = * d .EgressRules [i ]
@@ -297,6 +311,7 @@ func (d *DesiredLRP) DesiredLRPRunInfo(createdAt time.Time) DesiredLRPRunInfo {
297
311
d .ImageLayers ,
298
312
d .Sidecars ,
299
313
d .LogRateLimit ,
314
+ volumeMountedFiles ,
300
315
)
301
316
}
302
317
@@ -308,6 +323,13 @@ func (d *DesiredLRP) Copy() *DesiredLRP {
308
323
func (desired DesiredLRP ) Validate () error {
309
324
var validationError ValidationError
310
325
326
+ if len (desired .VolumeMountedFiles ) > 0 {
327
+ err := validateVolumeMountedFiles (desired .VolumeMountedFiles )
328
+ if err != nil {
329
+ validationError = validationError .Append (ErrInvalidField {"volumeMountedFiles" })
330
+ }
331
+ }
332
+
311
333
if desired .GetDomain () == "" {
312
334
validationError = validationError .Append (ErrInvalidField {"domain" })
313
335
}
@@ -661,6 +683,7 @@ func NewDesiredLRPRunInfo(
661
683
imageLayers []* ImageLayer ,
662
684
sidecars []* Sidecar ,
663
685
logRateLimit * LogRateLimit ,
686
+ volumeMountedFiles []* File ,
664
687
) DesiredLRPRunInfo {
665
688
return DesiredLRPRunInfo {
666
689
DesiredLRPKey : key ,
@@ -688,6 +711,7 @@ func NewDesiredLRPRunInfo(
688
711
ImageLayers : imageLayers ,
689
712
Sidecars : sidecars ,
690
713
LogRateLimit : logRateLimit ,
714
+ VolumeMountedFiles : volumeMountedFiles ,
691
715
}
692
716
}
693
717
@@ -696,6 +720,13 @@ func (runInfo DesiredLRPRunInfo) Validate() error {
696
720
697
721
validationError = validationError .Check (runInfo .DesiredLRPKey )
698
722
723
+ if len (runInfo .VolumeMountedFiles ) > 0 {
724
+ err := validateVolumeMountedFiles (runInfo .VolumeMountedFiles )
725
+ if err != nil {
726
+ validationError = validationError .Append (ErrInvalidField {"volumeMountedFiles" })
727
+ }
728
+ }
729
+
699
730
if runInfo .Setup != nil {
700
731
if err := runInfo .Setup .Validate (); err != nil {
701
732
validationError = validationError .Append (ErrInvalidField {"setup" })
@@ -780,3 +811,14 @@ func (*CertificateProperties) Version() format.Version {
780
811
func (CertificateProperties ) Validate () error {
781
812
return nil
782
813
}
814
+
815
+ func validateVolumeMountedFiles (files []* File ) error {
816
+ var totalSize int
817
+ for _ , file := range files {
818
+ totalSize += len (file .Content )
819
+ if totalSize > volumeMountedFilesMaxAllowedSize {
820
+ return errors .New ("total size of all file values exceeds 1MB" )
821
+ }
822
+ }
823
+ return nil
824
+ }
0 commit comments