@@ -70,6 +70,7 @@ type UsersSpec struct {
70
70
type OrgSpec struct {
71
71
Name string `yaml:"Name"`
72
72
Domain string `yaml:"Domain"`
73
+ CA NodeSpec `yaml:"CA"`
73
74
Template NodeTemplate `yaml:"Template"`
74
75
Specs []NodeSpec `yaml:"Specs"`
75
76
Users UsersSpec `yaml:"Users"`
@@ -107,6 +108,15 @@ PeerOrgs:
107
108
- Name: Org1
108
109
Domain: org1.example.com
109
110
111
+ # ---------------------------------------------------------------------------
112
+ # "CA"
113
+ # ---------------------------------------------------------------------------
114
+ # Uncomment this section to enable the explicit definition of the CA for this
115
+ # organization. This entry is a Spec. See "Specs" section below for details.
116
+ # ---------------------------------------------------------------------------
117
+ # CA:
118
+ # Hostname: ca # implicitly ca.org1.example.com
119
+
110
120
# ---------------------------------------------------------------------------
111
121
# "Specs"
112
122
# ---------------------------------------------------------------------------
@@ -263,6 +273,15 @@ func parseTemplate(input, defaultInput string, data interface{}) (string, error)
263
273
return output .String (), nil
264
274
}
265
275
276
+ func renderCN (domain string , spec NodeSpec ) (string , error ) {
277
+ data := CommonNameData {
278
+ Hostname : spec .Hostname ,
279
+ Domain : domain ,
280
+ }
281
+
282
+ return parseTemplate (spec .CommonName , defaultCNTemplate , data )
283
+ }
284
+
266
285
func generateNodeSpec (orgSpec * OrgSpec , prefix string ) error {
267
286
// First process all of our templated nodes
268
287
for i := 0 ; i < orgSpec .Template .Count ; i ++ {
@@ -281,21 +300,26 @@ func generateNodeSpec(orgSpec *OrgSpec, prefix string) error {
281
300
orgSpec .Specs = append (orgSpec .Specs , spec )
282
301
}
283
302
284
- // And finally touch up all specs to add the domain
303
+ // Touch up all general node- specs to add the domain
285
304
for idx , spec := range orgSpec .Specs {
286
- data := CommonNameData {
287
- Hostname : spec .Hostname ,
288
- Domain : orgSpec .Domain ,
289
- }
290
-
291
- finalCN , err := parseTemplate (spec .CommonName , defaultCNTemplate , data )
305
+ finalCN , err := renderCN (orgSpec .Domain , spec )
292
306
if err != nil {
293
307
return err
294
308
}
295
309
296
310
orgSpec .Specs [idx ].CommonName = finalCN
297
311
}
298
312
313
+ // Process the CA node-spec in the same manner
314
+ if len (orgSpec .CA .Hostname ) == 0 {
315
+ orgSpec .CA .Hostname = "ca"
316
+ }
317
+ finalCN , err := renderCN (orgSpec .Domain , orgSpec .CA )
318
+ if err != nil {
319
+ return err
320
+ }
321
+ orgSpec .CA .CommonName = finalCN
322
+
299
323
return nil
300
324
}
301
325
@@ -311,7 +335,7 @@ func generatePeerOrg(baseDir string, orgSpec OrgSpec) {
311
335
peersDir := filepath .Join (orgDir , "peers" )
312
336
usersDir := filepath .Join (orgDir , "users" )
313
337
adminCertsDir := filepath .Join (mspDir , "admincerts" )
314
- rootCA , err := ca .NewCA (caDir , orgName )
338
+ rootCA , err := ca .NewCA (caDir , orgName , orgSpec . CA . CommonName )
315
339
if err != nil {
316
340
fmt .Printf ("Error generating CA for org %s:\n %v\n " , orgName , err )
317
341
os .Exit (1 )
@@ -407,7 +431,7 @@ func generateOrdererOrg(baseDir string, orgSpec OrgSpec) {
407
431
orderersDir := filepath .Join (orgDir , "orderers" )
408
432
usersDir := filepath .Join (orgDir , "users" )
409
433
adminCertsDir := filepath .Join (mspDir , "admincerts" )
410
- rootCA , err := ca .NewCA (caDir , orgName )
434
+ rootCA , err := ca .NewCA (caDir , orgName , orgSpec . CA . CommonName )
411
435
if err != nil {
412
436
fmt .Printf ("Error generating CA for org %s:\n %v\n " , orgName , err )
413
437
os .Exit (1 )
0 commit comments