pacemaker  2.0.1-57cc9c14bf
Scalable High-Availability cluster resource manager
variant.h
Go to the documentation of this file.
1 /*
2  * Copyright 2004-2018 Andrew Beekhof <andrew@beekhof.net>
3  *
4  * This source code is licensed under the GNU Lesser General Public License
5  * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
6  */
7 
8 #ifndef PE_VARIANT__H
9 # define PE_VARIANT__H
10 
11 # if VARIANT_CLONE
12 
13 typedef struct clone_variant_data_s {
14  int clone_max;
15  int clone_node_max;
16 
17  int promoted_max;
18  int promoted_node_max;
19 
20  int total_clones;
21 
22  // @TODO make these a bitmask
23  gboolean interleave;
24  gboolean ordered;
25  gboolean applied_master_prefs;
26  gboolean merged_master_weights;
27 
28  notify_data_t *stop_notify;
29  notify_data_t *start_notify;
30  notify_data_t *demote_notify;
31  notify_data_t *promote_notify;
32 
33  xmlNode *xml_obj_child;
34 } clone_variant_data_t;
35 
36 # define get_clone_variant_data(data, rsc) \
37  CRM_ASSERT(rsc != NULL); \
38  CRM_ASSERT(rsc->variant == pe_clone); \
39  data = (clone_variant_data_t *)rsc->variant_opaque;
40 
41 # elif VARIANT_CONTAINER
42 
43 typedef struct
44 {
45  int offset;
46  node_t *node;
47  char *ipaddr;
48  resource_t *ip;
49  resource_t *child;
50  resource_t *docker;
51  resource_t *remote;
52 
53 } container_grouping_t;
54 
55 typedef struct
56 {
57  char *source;
58  char *target;
59  char *options;
60  int flags;
61 
62 } container_mount_t;
63 
64 typedef struct
65 {
66  char *source;
67  char *target;
68 
69 } container_port_t;
70 
71 enum container_type {
72  PE_CONTAINER_TYPE_UNKNOWN,
73  PE_CONTAINER_TYPE_DOCKER,
74  PE_CONTAINER_TYPE_RKT,
75  PE_CONTAINER_TYPE_PODMAN
76 };
77 
78 #define PE_CONTAINER_TYPE_UNKNOWN_S "unknown"
79 #define PE_CONTAINER_TYPE_DOCKER_S "Docker"
80 #define PE_CONTAINER_TYPE_RKT_S "rkt"
81 #define PE_CONTAINER_TYPE_PODMAN_S "podman"
82 
83 typedef struct container_variant_data_s {
84  int promoted_max;
85  int replicas;
86  int replicas_per_host;
87  char *prefix;
88  char *image;
89  const char *ip_last;
90  char *host_network;
91  char *host_netmask;
92  char *control_port;
93  char *docker_network;
94  char *ip_range_start;
95  gboolean add_host;
96  char *docker_host_options;
97  char *docker_run_options;
98  char *docker_run_command;
99  const char *attribute_target;
100 
101  resource_t *child;
102 
103  GListPtr tuples; /* container_grouping_t * */
104  GListPtr ports; /* */
105  GListPtr mounts; /* */
106 
107  enum container_type type;
108 } container_variant_data_t;
109 
110 # define get_container_variant_data(data, rsc) \
111  CRM_ASSERT(rsc != NULL); \
112  CRM_ASSERT(rsc->variant == pe_container); \
113  CRM_ASSERT(rsc->variant_opaque != NULL); \
114  data = (container_variant_data_t *)rsc->variant_opaque; \
115 
116 # elif VARIANT_GROUP
117 
118 typedef struct group_variant_data_s {
119  int num_children;
120  resource_t *first_child;
121  resource_t *last_child;
122 
123  gboolean colocated;
124  gboolean ordered;
125 
126  gboolean child_starting;
127  gboolean child_stopping;
128 
129 } group_variant_data_t;
130 
131 # define get_group_variant_data(data, rsc) \
132  CRM_ASSERT(rsc != NULL); \
133  CRM_ASSERT(rsc->variant == pe_group); \
134  CRM_ASSERT(rsc->variant_opaque != NULL); \
135  data = (group_variant_data_t *)rsc->variant_opaque; \
136 
137 # elif VARIANT_NATIVE
138 
139 typedef struct native_variant_data_s {
140  int dummy;
141 } native_variant_data_t;
142 
143 # define get_native_variant_data(data, rsc) \
144  CRM_ASSERT(rsc != NULL); \
145  CRM_ASSERT(rsc->variant == pe_native); \
146  CRM_ASSERT(rsc->variant_opaque != NULL); \
147  data = (native_variant_data_t *)rsc->variant_opaque;
148 
149 # endif
150 
151 #endif
GList * GListPtr
Definition: crm.h:190
uint64_t flags
Definition: remote.c:148
enum crm_ais_msg_types type
Definition: internal.h:83