Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
provision/example/basic/basic_service.inc /
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
181 lines (152 sloc)
4.85 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| // $Id$ | |
| /** | |
| * @file | |
| * A 'basic' implementation of the 'example' service type. | |
| */ | |
| /** | |
| * A class containing the 'basic' implementation of the 'example' service. | |
| * | |
| * This class is conditionally loaded when the "--example_service_type=basic" | |
| * option is passed to provision-save commands run on servers. | |
| * | |
| * The above flag is generated by the hosting counterpart of this class, which | |
| * provides the front end to configure all these fields. | |
| * | |
| * The responsibilities of this class include responding and saving any | |
| * values that are passed to it, and also to override the portions of | |
| * the public API for this service that are necessary. | |
| */ | |
| class provisionService_example_basic extends provisionService_example { | |
| /** | |
| * Some common options handled upstream by the base service classes. | |
| */ | |
| /** | |
| * This service needs to have a port specified for it. | |
| */ | |
| public $has_port = TRUE; | |
| /** | |
| * The default value for the port input. | |
| */ | |
| function default_port() { | |
| return 12345; | |
| } | |
| /** | |
| * This service needs to be restarted with a shell command. | |
| */ | |
| public $has_restart_cmd = TRUE; | |
| /** | |
| * The default value for the restart command input. | |
| */ | |
| function default_restart_cmd() { | |
| return "/usr/bin/true"; | |
| } | |
| /** | |
| * Initialize this class, including option handling. | |
| */ | |
| function init() { | |
| // REMEMBER TO CALL THE PARENT! | |
| parent::init(); | |
| /** | |
| * Register configuration classes for the create_config / delete_config methods. | |
| */ | |
| $this->configs['server'][] = 'provisionConfig_example'; | |
| /** | |
| * Setting and storing a value. | |
| * | |
| * You will most commonly use : | |
| * $this->server->setProperty('example_field', 'default'); | |
| * | |
| * This helper will check for an existing saved value, overridden | |
| * by a command line option falling back to the default. | |
| * | |
| * This is the format used by everything you want configurable from | |
| * the front end or command line. | |
| * | |
| * These values will be saved in ~/.drush/server_name.drush.alias.inc. | |
| */ | |
| $this->server->setProperty('example_field', 'default'); | |
| /** | |
| * Non configurable values. | |
| * | |
| * If you want to generate values for use in your code or templates, | |
| * but don't want them to be overridden you would use the following format. | |
| * | |
| * $this->server->example_config_path = $this->server->config_path . '/example.d' | |
| * | |
| * This will mean the value will change if you change the config path, but | |
| * you dont need to pass the right input to your command to get there, | |
| * and it's impossible to change the values. | |
| */ | |
| $this->server->example_config_path = $this->server->config_path . '/example.d'; | |
| } | |
| /** | |
| * Pass additional values to the config file templates. | |
| * | |
| * Even though the $server variable will be available in your template files, | |
| * you may wish to pass additional calculated values to your template files. | |
| * | |
| * Consider this something like the hook_preprocess stuff in drupal. | |
| */ | |
| function config_data($config = null, $class = null) { | |
| // This format of calling the parent is very important! | |
| $data = parent::config_data($config, $class); | |
| /** | |
| * This value will become available as $example_current_time | |
| * in all the config files generated by this service. | |
| * | |
| * You could also choose to only conditionally pass values based on | |
| * the parameters. | |
| */ | |
| $data['example_current_time'] = date(DATE_COOKIE, mktime()); | |
| return $data; | |
| } | |
| /** | |
| * Implementation of service verify. | |
| */ | |
| function verify() { | |
| parent::verify(); | |
| if ($this->context->type == 'server') { | |
| // Create the configuration file directory. | |
| provision_file()->create_dir($this->server->example_config_path, dt("Example configuration"), 0700); | |
| // Sync the directory to the remote server if needed. | |
| $this->sync($this->server->example_config_path); | |
| } | |
| } | |
| } | |
| /** | |
| * A basic configuration file class. | |
| * | |
| * Just a file containing the value passed to us. | |
| */ | |
| class provisionConfig_example extends provisionConfig { | |
| /** | |
| * Template file to load. In the same directory as this class definition. | |
| */ | |
| public $template = 'basic.tpl.php'; | |
| /** | |
| * Where the file generated will end up. | |
| * | |
| * It is extremely important that this path is only made up of information | |
| * relative to this class, and does not use drush_get_option or the d() accessor. | |
| */ | |
| function filename() { | |
| return $this->example_config_path . '/example.conf'; | |
| } | |
| /** | |
| * Override the write method. | |
| */ | |
| function write() { | |
| parent::write(); | |
| // Sync the config to a remote server if necessary. | |
| $this->data['server']->sync($this->filename()); | |
| } | |
| /** | |
| * Override the unlink method. | |
| */ | |
| function unlink() { | |
| parent::unlink(); | |
| // Remove the config from a remote server if necessary. | |
| $this->data['server']->sync($this->filename()); | |
| } | |
| } | |