-
Language:
English
-
Language:
English
8.3. Cartridge Event Example
In this example, an application developer adds a MySQL database cartridge to a PHP application. The publish and subscribe relationship between the cartridges enables the PHP cartridge to set environment variables on its gear so it can connect to the new MySQL cartridge, which is on a different gear.
MySQL Cartridge as Publisher
The MySQL cartridge lists a publish-mysql-connection-info
event in the Publishes
section of its mysql/metadata/manifest.yml
file:
Publishes: publish-mysql-connection-info: Type: "NET_TCP:db:mysql"
The MySQL cartridge implements a script in
mysql/hooks/publish-mysql-connection-info
.
PHP Cartridge as Subscriber
The PHP cartridge lists a set-mysql-connection-info
event in the Subscribes
section of its php/metadata/manifest.yml
file:
Subscribes: set-mysql-connection-info: Type: "NET_TCP:db:mysql"
The PHP cartridge implements a script in
php/hooks/set-mysql-connection-info
.
Cartridge Event Communication Process
OpenShift Enterprise matches the event Type
in the PHP cartridge's Subscribes
list to the event Type
in the MySQL cartridge's Publishes
list. In this example, the event Type
is "NET_TCP:db:mysql"
.
The MySQL cartridge's
publish-mysql-connection-info
script outputs the username, host, port, URL, and password required to connect to the MySQL instance:
OPENSHIFT_MYSQL_DB_USERNAME=username; OPENSHIFT_MYSQL_DB_PASSWORD=password; OPENSHIFT_MYSQL_DB_HOST=hostname; OPENSHIFT_MYSQL_DB_PORT=port; OPENSHIFT_MYSQL_DB_URL=url;
OpenShift Enterprise sends the output of the MySQL cartridge's
publish-mysql-connection-info
to the PHP cartridge's set-mysql-connection-info
script using the following format:
hooks/publish-mysql-connection-info gear_name namespace gear_uuid 'OPENSHIFT_MYSQL_DB_USERNAME=username;OPENSHIFT_MYSQL_DB_PASSWORD=password;OPENSHIFT_MYSQL_DB_HOST=hostname;OPENSHIFT_MYSQL_DB_PORT=port;OPENSHIFT_MYSQL_DB_URL=url;'
Note that the publisher script determines the format of the information input to the subscriber script. When writing subscriber scripts, ensure that they parse the input correctly.