@@ -232,13 +232,13 @@ create_docker_resource(
232
232
}
233
233
234
234
for (GListPtr pIter = data -> ports ; pIter != NULL ; pIter = pIter -> next ) {
235
- char * port = pIter -> data ;
235
+ container_port_t * port = pIter -> data ;
236
236
237
237
if (tuple -> ipaddr ) {
238
238
offset += snprintf (buffer + offset , max - offset , " -p %s:%s:%s" ,
239
- tuple -> ipaddr , port , port );
239
+ tuple -> ipaddr , port -> source , port -> target );
240
240
} else {
241
- offset += snprintf (buffer + offset , max - offset , " -p %s:%s" , port , port );
241
+ offset += snprintf (buffer + offset , max - offset , " -p %s:%s" , port -> source , port -> target );
242
242
}
243
243
}
244
244
@@ -410,6 +410,13 @@ static void mount_free(container_mount_t *mount)
410
410
free (mount );
411
411
}
412
412
413
+ static void port_free (container_port_t * port )
414
+ {
415
+ free (port -> source );
416
+ free (port -> target );
417
+ free (port );
418
+ }
419
+
413
420
gboolean
414
421
container_unpack (resource_t * rsc , pe_working_set_t * data_set )
415
422
{
@@ -465,16 +472,24 @@ container_unpack(resource_t * rsc, pe_working_set_t * data_set)
465
472
for (xmlNode * xml_child = __xml_first_child_element (xml_obj ); xml_child != NULL ;
466
473
xml_child = __xml_next_element (xml_child )) {
467
474
468
- char * port = crm_element_value_copy (xml_child , "port" );
475
+ container_port_t * port = calloc (1 , sizeof (container_port_t ));
476
+ port -> source = crm_element_value_copy (xml_child , "port" );
469
477
470
- if (port == NULL ) {
471
- port = crm_element_value_copy (xml_child , "range" );
478
+ if (port -> source == NULL ) {
479
+ port -> source = crm_element_value_copy (xml_child , "range" );
480
+ } else {
481
+ port -> target = crm_element_value_copy (xml_child , "internal-port" );
472
482
}
473
483
474
- if (port != NULL ) {
484
+ if (port -> source != NULL && strlen (port -> source ) > 0 ) {
485
+ if (port -> target == NULL ) {
486
+ port -> target = strdup (port -> source );
487
+ }
475
488
container_data -> ports = g_list_append (container_data -> ports , port );
489
+
476
490
} else {
477
491
pe_err ("Invalid port directive %s" , ID (xml_child ));
492
+ port_free (port );
478
493
}
479
494
}
480
495
}
@@ -557,6 +572,7 @@ container_unpack(resource_t * rsc, pe_working_set_t * data_set)
557
572
GListPtr childIter = NULL ;
558
573
resource_t * new_rsc = NULL ;
559
574
container_mount_t * mount = NULL ;
575
+ container_port_t * port = calloc (1 , sizeof (container_port_t ));
560
576
561
577
int offset = 0 , max = 1024 ;
562
578
char * buffer = calloc (1 , max + 1 );
@@ -576,11 +592,14 @@ container_unpack(resource_t * rsc, pe_working_set_t * data_set)
576
592
container_data -> mounts = g_list_append (container_data -> mounts , mount );
577
593
578
594
if (container_data -> control_port ) {
579
- container_data -> ports = g_list_append ( container_data -> ports , strdup (container_data -> control_port ) );
595
+ port -> source = strdup (container_data -> control_port );
580
596
} else {
581
- container_data -> ports = g_list_append ( container_data -> ports , crm_itoa (DEFAULT_REMOTE_PORT ) );
597
+ port -> source = crm_itoa (DEFAULT_REMOTE_PORT );
582
598
}
583
599
600
+ port -> target = strdup (port -> source );
601
+ container_data -> ports = g_list_append (container_data -> ports , port );
602
+
584
603
if (common_unpack (xml_resource , & new_rsc , rsc , data_set ) == FALSE) {
585
604
pe_err ("Failed unpacking resource %s" , crm_element_value (rsc -> xml , XML_ATTR_ID ));
586
605
if (new_rsc != NULL && new_rsc -> fns != NULL ) {
@@ -845,7 +864,7 @@ container_free(resource_t * rsc)
845
864
846
865
g_list_free_full (container_data -> tuples , (GDestroyNotify )tuple_free );
847
866
g_list_free_full (container_data -> mounts , (GDestroyNotify )mount_free );
848
- g_list_free_full (container_data -> ports , free );
867
+ g_list_free_full (container_data -> ports , ( GDestroyNotify ) port_free );
849
868
common_free (rsc );
850
869
}
851
870
0 commit comments