= Developer Guidelines: DeploymentTools = == Introduction == The coapp needs to allow users to deploy Eden on Linux Servers that may be EC2 instances (preferred). We also need to support features such as: * 3-tier Deployment * Amazon AutoScaling * Management Tasks (Clean Tables/Pull Eden) * Allow edition of configuration files The requirements demand the need of a library which allows us to communicate with servers and install packages and issue commands remotely. We're using Ansible [http://ansible.com/] for this task. == Workflow == * Deploy the coapp using the instructions at [http://eden.sahanafoundation.org/wiki/InstallationGuidelines/Amazon#InstallingDeploymentCoapponEC2] * Access the coapp, register a user and create a new Deployment * User may add a signle role (all) or multiple roles (db, webserver, eden) * User may only associate a single instance (prod/demo) while creating the deployment. Others may be added after succesful deployment of the first one. * On form submit, a YML file is generated in the yaml/ directory of the application (examples [https://github.com/sahana/eden_playbook/tree/master/examples] and ansible is ran using the web2py scheduler. * The success/failure is reported once the scheduler task is completed. * If successful, the user may further add instances (eg. demo/test) to the same deployment or issue management tasks using tabs/buttons in the rheader == Schema == The setup_deployment table is used to store various attributes related to the deployment. The setup_instance table is used to store the type of instances along with its URL and a FK to scheduler_id. Each time an instance is added to the deployment, a YAML file is created in the background and ansible is called using the web2py scheduler. The setup_server table is used to store the role (all/db/webserver/eden) of a particular host in the deployment along with its IP and hostname. '''Background Workflow''' * S3SQLInlineComponent/S3SQLInlineLink allows addition of entries in setup_server and setup_instance. * After form submission and record creation, an entry is added to the scheduler_task table to run ansible (row id of scheduler_task is stored in setup_instance table). Ansible playbook (yaml file) takes in the values of variables from the user input in the create form. * Success/Failure of the deployment is displayed on the "read" method of the deployment