# Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. Namespaces: =: com.example std: io.murano sys: io.murano.system db: com.example.databases srv: com.example.apache conf: io.murano.configuration Name: WordPress Extends: std:Application Properties: server: Contract: $.class(srv:ApacheHttpServer).notNull() database: Contract: $.class(db:MySql).notNull() dbName: Contract: $.string().notNull() dbUser: Contract: $.string().notNull() dbPassword: Contract: $.string().notNull() monitoring: Contract: $.class(ZabbixAgent) Methods: .init: Body: - $._environment: $.find(std:Environment).require() deploy: Body: - If: not $.getAttr(deployed, false) Then: - $._environment.reporter.report($this, 'Ensuring Apache is deployed.') - $.server.deploy() # NOTE(ddovbii) This also can be done using the mechanism of contract checks as following: # Contract: $.class(srv:ApacheHttpServer).notNull().check($.enablePHP = true) # Due to the fact that in case of contract conflicts we can't write a custom error messages # to the deployment logs and can't show them to user it is done in this way. As soon as we implement # this opportunity this check will be deleted and contract check will be used - If: not $.server.enablePHP Then: - $msg: 'Unable to install WordPress. PHP is not installed on the server' - $._environment.reporter.report_error($this, $msg) - Throw: DependencyMissingError Message: $msg # Deploy Wordpress - $file: sys:Resources.string('deployWordPress.sh') - conf:Linux.runCommand($.server.instance.agent, $file) # Configure access to MySql - $._environment.reporter.report($this, 'Ensuring Database is deployed.') - $.database.createDatabase($.dbName) - $.database.createUser($.dbUser, $.dbPassword) - $.database.assignUser($.dbUser, $.dbName) - $._environment.reporter.report($this, 'Configure access to MySql.') - $replacements: "%DATABASE%": $.dbName "%USERNAME%": $.dbUser "%HOST%": $.database.instance.ipAddresses.first() "%PASSWORD%": $.dbPassword - $file: sys:Resources.string('configureAccessToMySql.sh').replace($replacements) - conf:Linux.runCommand($.server.instance.agent, $file) - If: $.monitoring != null Then: - $.monitoring.setUpAgent($.server.instance) - $._environment.reporter.report($this, 'Application is installed') - If: $.server.instance.assignFloatingIp Then: - $address: $.server.instance.floatingIpAddress + '/wordpress' - $._environment.reporter.report($this, format('Running at http://{0}', $address)) - $.setAttr(deployed, true)