diff --git a/Vagrantfile b/Vagrantfile index 9d6a908a00..13e86e0675 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -1,250 +1,102 @@ -require 'yaml' +Vagrant.require_version ">= 1.5" -unless Vagrant.has_plugin?("vagrant-hostsupdater") - raise 'vagrant-hostmanager is not installed! please run "vagrant plugin install vagrant-hostsupdater' +unless Vagrant.has_plugin?('vagrant-hostmanager') + raise "vagrant-hostmanager is not installed! Please run\n vagrant plugin install vagrant-hostmanager\n\n" +end +$root = File.dirname(File.expand_path(__FILE__)) + +# Check to determine whether we're on a windows or linux/os-x host, +# later on we use this to launch ansible in the supported way +# source: https://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby +def which(cmd) + exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : [''] + ENV['PATH'].split(File::PATH_SEPARATOR).each do |path| + exts.each { |ext| + exe = File.join(path, "#{cmd}#{ext}") + return exe if File.executable? exe + } + end + return nil end -root = File.dirname(File.expand_path(__FILE__)) +def config_net(config) + # Configure hostmanager + config.hostmanager.enabled = true + config.hostmanager.manage_host = true + config.hostmanager.ignore_private_ip = false + config.hostmanager.include_offline = true + config.hostmanager.aliases = [ + $hostname + ".vb", + "www." + $hostname + ".vb", + "dev." + $hostname + ".vb" + ] -Vagrant.configure("2") do |config| - Dir.glob(root+"/resources/vagrant/vms/**/puphpet/config.yaml").each do|f| - dir = File.dirname(File.expand_path(f+"/..")) - base_path = dir - configValues = YAML.load_file(f) - data = configValues['vagrantfile-local'] + #config.vm.network :public_network, type: "dhcp", bridge: "en0: Ethernet" - # Force vagrant folder in nfs mode. Windows users should comment following line - config.vm.synced_folder ".", "/vagrant", type: "nfs" - - config.vm.define "vm-#{data['name']}" do |node| - node.vm.box = "#{data['vm']['box']}" - node.vm.box_url = "#{data['vm']['box_url']}" - - if data['vm']['hostname'].to_s.strip.length != 0 - node.vm.hostname = "#{data['vm']['hostname']}" - end - - node.vm.provider :virtualbox do |vb| - vb.name = "#{data['name']}" - end - - if data['vm']['network']['private_network'].to_s != '' - node.vm.network :private_network, ip: "#{data['vm']['network']['private_network']}" - end - - data['vm']['network']['forwarded_port'].each do |i, port| - - if port['guest'] != '' && port['host'] != '' - node.vm.network :forwarded_port, guest: port['guest'].to_i, host: port['host'].to_i - end + # Assign static IP if present in network config + if File.file?($root + "/.network.conf") + ipAddress = File.read($root + "/.network.conf") + config.vm.network :private_network, ip: ipAddress + else + # vboxnet0 can be changed to use a specific private_network + config.vm.network :private_network, type: "dhcp" + config.vm.provider "virtualbox" do |vb| + vb.customize ["modifyvm", :id, "--hostonlyadapter2", "vboxnet0"] end - - if Vagrant.has_plugin?('vagrant-hostsupdater') - hosts = Array.new() - - if !configValues['apache']['install'].nil? && - configValues['apache']['install'].to_i == 1 && - configValues['apache']['vhosts'].is_a?(Hash) - configValues['apache']['vhosts'].each do |i, vhost| - hosts.push(vhost['servername']) - - if vhost['serveraliases'].is_a?(Array) - vhost['serveraliases'].each do |vhost_alias| - hosts.push(vhost_alias) - end - end - end - elsif !configValues['nginx']['install'].nil? && - configValues['nginx']['install'].to_i == 1 && - configValues['nginx']['vhosts'].is_a?(Hash) - configValues['nginx']['vhosts'].each do |i, vhost| - hosts.push(vhost['server_name']) - - if vhost['server_aliases'].is_a?(Array) - vhost['server_aliases'].each do |x, vhost_alias| - hosts.push(vhost_alias) - end - end - end - end - - if hosts.any? - contents = File.open("#{dir}/puphpet/shell/hostsupdater-notice.txt", 'r'){ |file| file.read } - puts "\n\033[34m#{contents}\033[0m\n" - - if node.vm.hostname.to_s.strip.length == 0 - node.vm.hostname = 'puphpet-dev-machine' - end - - node.hostsupdater.aliases = hosts - end - end - - data['vm']['synced_folder'].each do |i, folder| - if folder['source'] == '' - folder['source'] = root - end - if folder['source'] != '' && folder['target'] != '' - if folder['sync_type'] == 'nfs' - node.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: "nfs", mount_options: ['rw', 'vers=3', 'tcp', 'fsc'] - elsif folder['sync_type'] == 'smb' - node.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: "smb" - elsif folder['sync_type'] == 'rsync' - rsync_args = !folder['rsync']['args'].nil? ? folder['rsync']['args'] : ["--verbose", "--archive", "--delete", "-z"] - rsync_auto = !folder['rsync']['auto'].nil? ? folder['rsync']['auto'] : true - rsync_exclude = !folder['rsync']['exclude'].nil? ? folder['rsync']['exclude'] : [".vagrant/"] - - node.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", - rsync__args: rsync_args, rsync__exclude: rsync_exclude, rsync__auto: rsync_auto, type: "rsync" - else - node.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", - group: 'www-data', owner: 'www-data', mount_options: ["dmode=775", "fmode=764"] - end - end - end - - node.vm.usable_port_range = (10200..10500) - - if data['vm']['chosen_provider'].empty? || data['vm']['chosen_provider'] == "virtualbox" - ENV['VAGRANT_DEFAULT_PROVIDER'] = 'virtualbox' - - node.vm.provider :virtualbox do |virtualbox| - data['vm']['provider']['virtualbox']['modifyvm'].each do |key, value| - if key == "memory" - next - end - - if key == "natdnshostresolver1" - value = value ? "on" : "off" - end - - virtualbox.customize ["modifyvm", :id, "--#{key}", "#{value}"] - end - - virtualbox.customize ["modifyvm", :id, "--memory", "#{data['vm']['memory']}"] - - if data['vm']['hostname'].to_s.strip.length != 0 - virtualbox.customize ["modifyvm", :id, "--name", node.vm.hostname] - end - end - end - - if data['vm']['chosen_provider'] == "vmware_fusion" || data['vm']['chosen_provider'] == "vmware_workstation" - ENV['VAGRANT_DEFAULT_PROVIDER'] = (data['vm']['chosen_provider'] == "vmware_fusion") ? "vmware_fusion" : "vmware_workstation" - - node.vm.provider "vmware_fusion" do |v| - data['vm']['provider']['vmware'].each do |key, value| - if key == "memsize" - next - end - - v.vmx["#{key}"] = "#{value}" - end - - v.vmx["memsize"] = "#{data['vm']['memory']}" - - if data['vm']['hostname'].to_s.strip.length != 0 - v.vmx["displayName"] = node.vm.hostname - end - end - end - - if data['vm']['chosen_provider'] == "parallels" - ENV['VAGRANT_DEFAULT_PROVIDER'] = "parallels" - - node.vm.provider "parallels" do |v| - data['vm']['provider']['parallels'].each do |key, value| - if key == "memsize" - next - end - - v.customize ["set", :id, "--#{key}", "#{value}"] - end - - v.memory = "#{data['vm']['memory']}" - v.cpus = "#{data['vm']['cpus']}" - - if data['vm']['hostname'].to_s.strip.length != 0 - v.name = node.vm.hostname - end - end - end - - ssh_username = !data['ssh']['username'].nil? ? data['ssh']['username'] : "vagrant" - - node.vm.provision "shell" do |s| - s.path = "#{base_path}/puphpet/shell/initial-setup.sh" - s.args = "/vagrant/resources/vagrant/vms/#{data['name']}/puphpet" - end - - node.vm.provision "shell" do |kg| - kg.path = "#{base_path}/puphpet/shell/ssh-keygen.sh" - kg.args = "#{ssh_username}" - end - - node.vm.provision :shell, :path => "#{base_path}/puphpet/shell/update-puppet.sh" - - node.vm.provision :puppet do |puppet| - puppet.facter = { - "ssh_username" => "#{ssh_username}", - "provisioner_type" => ENV['VAGRANT_DEFAULT_PROVIDER'], - "vm_target_key" => 'vagrantfile-local', - } - puppet.manifests_path = "#{data['vm']['provision']['puppet']['manifests_path']}" - puppet.manifest_file = "#{data['vm']['provision']['puppet']['manifest_file']}" - puppet.module_path = "#{data['vm']['provision']['puppet']['module_path']}" - - if !data['vm']['provision']['puppet']['options'].empty? - puppet.options = data['vm']['provision']['puppet']['options'] - end - end - - node.vm.provision :shell do |s| - s.path = "#{base_path}/puphpet/shell/execute-files.sh" - s.args = ["exec-once", "exec-always"] - end - - node.vm.provision :shell, run: "always" do |s| - s.path = "#{base_path}/puphpet/shell/execute-files.sh" - s.args = ["startup-once", "startup-always"] - end - - node.vm.provision :shell, :path => "#{base_path}/puphpet/shell/important-notices.sh" - - if File.file?("#{dir}/puphpet/files/dot/ssh/id_rsa") - node.ssh.private_key_path = [ - "#{dir}/puphpet/files/dot/ssh/id_rsa", - "#{dir}/puphpet/files/dot/ssh/insecure_private_key" - ] - end - - if !data['ssh']['host'].nil? - node.ssh.host = "#{data['ssh']['host']}" - end - if !data['ssh']['port'].nil? - node.ssh.port = "#{data['ssh']['port']}" - end - if !data['ssh']['username'].nil? - node.ssh.username = "#{data['ssh']['username']}" - end - if !data['ssh']['guest_port'].nil? - node.ssh.guest_port = data['ssh']['guest_port'] - end - if !data['ssh']['shell'].nil? - node.ssh.shell = "#{data['ssh']['shell']}" - end - if !data['ssh']['keep_alive'].nil? - node.ssh.keep_alive = data['ssh']['keep_alive'] - end - if !data['ssh']['forward_agent'].nil? - node.ssh.forward_agent = data['ssh']['forward_agent'] - end - if !data['ssh']['forward_x11'].nil? - node.ssh.forward_x11 = data['ssh']['forward_x11'] - end - if !data['vagrant']['host'].nil? - node.vagrant.host = data['vagrant']['host'].gsub(":", "").intern + config.hostmanager.ip_resolver = proc do |vm, resolving_vm| + if vm.id + `VBoxManage guestproperty get #{vm.id} "/VirtualBox/GuestInfo/Net/1/V4/IP"`.split()[1] end end end end + +# By default, the name of the VM is the project's directory name +$hostname = File.basename($root) + +Vagrant.configure("2") do |config| + + config.vm.provider :virtualbox do |v| + v.name = $hostname + v.customize [ + "modifyvm", :id, + "--name", $hostname, + "--memory", 4096, + "--cpus", 2, + ] + end + + config.vm.box = "ubuntu/trusty64" + + config.ssh.forward_agent = true + config_net(config) + + # If ansible is in your path it will provision from your HOST machine + # If ansible is not found in the path it will be instaled in the VM and provisioned from there + if which('ansible-playbook') + config.vm.provision "ansible" do |ansible| + ansible.playbook = "resources/ansible/playbook.yml" + #ansible.inventory_path = "ansible/inventories/dev" + ansible.limit = 'all' + ansible.extra_vars = { + hostname: $hostname, + postfix: { + postfix_domain: $hostname + ".vb" + } + } + end + + config.vm.provision "ansible", run: "always" do |ansible| + ansible.playbook = "resources/ansible/playbook-always.yml" + ansible.limit = 'all' + ansible.extra_vars = { + hostname: $hostname + } + end + else + config.vm.provision :shell, path: "resources/ansible/windows.sh", args: ["default"] + config.vm.provision :shell, run: "always", path: "resources/ansible/windows-always.sh", args: ["default"] + end + + config.vm.synced_folder "./", "/vagrant", type: "nfs" +end diff --git a/resources/ansible/files/authorized_keys b/resources/ansible/files/authorized_keys new file mode 100644 index 0000000000..18a9c00fd5 --- /dev/null +++ b/resources/ansible/files/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key diff --git a/resources/ansible/inventories/dev b/resources/ansible/inventories/dev new file mode 100644 index 0000000000..98175f2f29 --- /dev/null +++ b/resources/ansible/inventories/dev @@ -0,0 +1,2 @@ +[phansible-web] +192.168.56.101 diff --git a/resources/ansible/playbook-always.yml b/resources/ansible/playbook-always.yml new file mode 100644 index 0000000000..85a0854121 --- /dev/null +++ b/resources/ansible/playbook-always.yml @@ -0,0 +1,7 @@ +--- +- hosts: all + sudo: true + vars_files: + - vars/all.yml + roles: + - app_reset diff --git a/resources/ansible/playbook.yml b/resources/ansible/playbook.yml new file mode 100644 index 0000000000..8e8622baa5 --- /dev/null +++ b/resources/ansible/playbook.yml @@ -0,0 +1,15 @@ +--- +- hosts: all + sudo: true + vars_files: + - vars/all.yml + roles: + - server + - vagrant_local + - nginx + - mariadb + - elasticsearch + - php + - xdebug + - composer + - app diff --git a/resources/ansible/roles/app/tasks/main.yml b/resources/ansible/roles/app/tasks/main.yml new file mode 100644 index 0000000000..79717b4011 --- /dev/null +++ b/resources/ansible/roles/app/tasks/main.yml @@ -0,0 +1,2 @@ +--- +# application tasks to be customized and to run after the main provision diff --git a/resources/ansible/roles/app_reset/tasks/main.yml b/resources/ansible/roles/app_reset/tasks/main.yml new file mode 100644 index 0000000000..ed97d539c0 --- /dev/null +++ b/resources/ansible/roles/app_reset/tasks/main.yml @@ -0,0 +1 @@ +--- diff --git a/resources/ansible/roles/composer/tasks/main.yml b/resources/ansible/roles/composer/tasks/main.yml new file mode 100644 index 0000000000..5eff546b3e --- /dev/null +++ b/resources/ansible/roles/composer/tasks/main.yml @@ -0,0 +1,2 @@ +- name: Install Composer + shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer creates=/usr/local/bin/composer diff --git a/resources/ansible/roles/elasticsearch/defaults/main.yml b/resources/ansible/roles/elasticsearch/defaults/main.yml new file mode 100644 index 0000000000..5be3fd70d5 --- /dev/null +++ b/resources/ansible/roles/elasticsearch/defaults/main.yml @@ -0,0 +1,2 @@ +--- +elasticsearch_url: https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-{{ elasticsearch.version }}.deb diff --git a/resources/ansible/roles/elasticsearch/tasks/main.yml b/resources/ansible/roles/elasticsearch/tasks/main.yml new file mode 100644 index 0000000000..5fafe86512 --- /dev/null +++ b/resources/ansible/roles/elasticsearch/tasks/main.yml @@ -0,0 +1,47 @@ +--- +- name: Check Elastic Search installation + shell: apt-cache policy elasticsearch | grep -Po 'Installed:\s(.*)' | cut -d' ' -f 2; + changed_when: false + register: install_status + +- name: Set installed variable + set_fact: is_installed='{{ install_status.stdout == elasticsearch.version }}' + +- name: Add dependencies repository + apt_repository: repo='ppa:webupd8team/java' update_cache=yes + +- name: Set dependencies License + shell: echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections + changed_when: false + +- name: Install Dependencies + apt: pkg=oracle-java8-installer state=latest + +- name: Download + get_url: > + url={{ elasticsearch_url }} + dest=/tmp/elasticsearch-{{ elasticsearch.version }}.deb + when: not is_installed + +- name: Install + apt: deb=/tmp/elasticsearch-{{ elasticsearch.version }}.deb + when: not is_installed + +- name: Set port + replace: > + dest="/etc/elasticsearch/elasticsearch.yml" + regexp='^#?(http\.port\:).*' + replace='\1 {{ elasticsearch.port }}' + +- name: Flush handlers to apply config changes + meta: flush_handlers + +- name: Enable Service + service: name=elasticsearch enabled=yes + +- name: Ensure Elastic Search is started + service: name=elasticsearch state=started + +- name: Remove tmp files + file: path=/tmp/elasticsearch-{{ elasticsearch.version }}.deb state=absent + when: not is_installed diff --git a/resources/ansible/roles/mariadb/tasks/main.yml b/resources/ansible/roles/mariadb/tasks/main.yml new file mode 100755 index 0000000000..9c29cc7d75 --- /dev/null +++ b/resources/ansible/roles/mariadb/tasks/main.yml @@ -0,0 +1,47 @@ +--- +# Retrieve the current hostname, because {{ ansible_hostname }} still contains the old name +- shell: hostname + register: current_hostname + +- name: Add MariaDB-Repository + sudo: yes + apt_repository: repo='deb http://mirror3.layerjet.com/mariadb/repo/10.1/ubuntu {{ ansible_distribution_release }} main' state=present + +- name: Add Key for MariaDB Repository + sudo: yes + apt_key: url=http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xcbcb082a1bb943db + +- name: Update apt + sudo: yes + apt: update_cache=yes + +- name: mariadb | Install MariaDB Packages + sudo: yes + apt: pkg={{ item }} state=latest + with_items: + - mariadb-server + - python-mysqldb + +- name: mariadb | Update root password for all root accounts + mysql_user: name=root host={{ item }} check_implicit_admin=yes password={{ mariadb.root_password }} login_user=root login_password={{ mariadb.root_password }} + with_items: + - "{{ current_hostname.stdout | lower }}" + - 127.0.0.1 + - ::1 + - localhost + +- name: mariadb | Ensure anonymous users are not in the database + mysql_user: name='' host={{ item }} state=absent login_user=root login_password={{ mariadb.root_password }} + with_items: + - localhost + - "{{ current_hostname.stdout | lower }}" + +- name: mariadb | Create databases + mysql_db: name={{ mariadb.database }} state=present login_user=root login_password={{ mariadb.root_password }} + +- name: mariadb | Import dump + mysql_db: name={{ mariadb.database }} state=import login_user=root login_password={{ mariadb.root_password }} target=/vagrant/{{ mariadb.dump }} + when: mariadb.dump + +- name: mariadb | Create users + mysql_user: name={{ mariadb.user }} password={{ mariadb.password }} priv={{ mariadb.database }}.*:ALL state=present login_user=root login_password={{ mariadb.root_password }} diff --git a/resources/ansible/roles/nginx/handlers/main.yml b/resources/ansible/roles/nginx/handlers/main.yml new file mode 100644 index 0000000000..1899c9cc09 --- /dev/null +++ b/resources/ansible/roles/nginx/handlers/main.yml @@ -0,0 +1,3 @@ +--- +- name: restart nginx + service: name=nginx enabled=yes state=restarted \ No newline at end of file diff --git a/resources/ansible/roles/nginx/tasks/main.yml b/resources/ansible/roles/nginx/tasks/main.yml new file mode 100644 index 0000000000..b0371dffd8 --- /dev/null +++ b/resources/ansible/roles/nginx/tasks/main.yml @@ -0,0 +1,9 @@ +--- +- name: Install Nginx + sudo: yes + apt: pkg=nginx state=latest + +- name: Change default nginx site + sudo: yes + template: src=default.tpl dest=/etc/nginx/sites-available/default + notify: restart nginx diff --git a/resources/ansible/roles/nginx/templates/default.tpl b/resources/ansible/roles/nginx/templates/default.tpl new file mode 100644 index 0000000000..e96f47334c --- /dev/null +++ b/resources/ansible/roles/nginx/templates/default.tpl @@ -0,0 +1,27 @@ +server { + listen 80; + + root {{ nginx.docroot }}; + index index.html index.php; + + server_name {{ nginx.servername }}; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + error_page 404 /404.html; + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/www; + } + + location ~ \.php$ { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass unix:/var/run/php5-fpm.sock; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + } +} diff --git a/resources/ansible/roles/php/handlers/main.yml b/resources/ansible/roles/php/handlers/main.yml new file mode 100644 index 0000000000..915cc8a3a9 --- /dev/null +++ b/resources/ansible/roles/php/handlers/main.yml @@ -0,0 +1,3 @@ +--- +- name: restart php5-fpm + service: name=php5-fpm enabled=yes state=restarted diff --git a/resources/ansible/roles/php/tasks/configure.yml b/resources/ansible/roles/php/tasks/configure.yml new file mode 100644 index 0000000000..8683569244 --- /dev/null +++ b/resources/ansible/roles/php/tasks/configure.yml @@ -0,0 +1,19 @@ +--- +- stat: path=/etc/php5/apache2/php.ini + register: modphp + +- stat: path=/etc/php5/fpm/php.ini + register: phpfpm + +- stat: path=/etc/php5/cli/php.ini + register: phpcli + +- include: php-fpm.yml + when: phpfpm.stat.exists + +- include: php-cli.yml + when: phpcli.stat.exists + +- include: mod-php.yml + when: modphp.stat.exists + diff --git a/resources/ansible/roles/php/tasks/main.yml b/resources/ansible/roles/php/tasks/main.yml new file mode 100644 index 0000000000..1896decd4f --- /dev/null +++ b/resources/ansible/roles/php/tasks/main.yml @@ -0,0 +1,21 @@ +--- +- name: Add ppa Repository + sudo: yes + apt_repository: repo=ppa:ondrej/{{ php.ppa }} update_cache=yes + +- name: Install php5 + sudo: yes + apt: pkg=php5 state=latest + +- name: Install php5-fpm + sudo: yes + apt: pkg=php5-fpm state=latest + +- name: Install PHP Packages + sudo: yes + apt: pkg={{ item }} state=latest + with_items: php.packages + when: php.packages is defined + +- include: configure.yml +- include: pecl.yml diff --git a/resources/ansible/roles/php/tasks/mod-php.yml b/resources/ansible/roles/php/tasks/mod-php.yml new file mode 100644 index 0000000000..fc5b367cec --- /dev/null +++ b/resources/ansible/roles/php/tasks/mod-php.yml @@ -0,0 +1,10 @@ +--- +- name: ensure timezone is set in apache2 php.ini + lineinfile: dest=/etc/php5/apache2/php.ini + regexp='date.timezone =' + line='date.timezone = {{ server.timezone }}' + +- name: enabling opcache + lineinfile: dest=/etc/php5/apache2/php.ini + regexp=';?opcache.enable=\d' + line='opcache.enable=1' diff --git a/resources/ansible/roles/php/tasks/pecl.yml b/resources/ansible/roles/php/tasks/pecl.yml new file mode 100644 index 0000000000..fefc6e67a3 --- /dev/null +++ b/resources/ansible/roles/php/tasks/pecl.yml @@ -0,0 +1,26 @@ +- name: Install + apt: pkg="php5-dev" state=present + when: php.pecl_packages is defined + +- name: Install Package + shell: echo "\n\n\n\n\n\n\n\n\n" | pecl install {{ item.package }} + register: pecl_result + changed_when: "'already installed' not in pecl_result.stdout" + failed_when: "pecl_result.stderr or ('ERROR' in pecl_result.stdout)" + with_items: php.pecl_packages + when: php.pecl_packages is defined + +- name: Create extension .ini file + template: > + src="extension.tpl" + dest="/etc/php5/mods-available/{{ item.name }}.ini" + owner="root" + group="root" + mode=0644 + with_items: php.pecl_packages + when: php.pecl_packages is defined + +- name: Enable extension + shell: php5enmod {{ item.name }} + with_items: php.pecl_packages + when: php.pecl_packages is defined diff --git a/resources/ansible/roles/php/tasks/php-cli.yml b/resources/ansible/roles/php/tasks/php-cli.yml new file mode 100644 index 0000000000..8be0b633af --- /dev/null +++ b/resources/ansible/roles/php/tasks/php-cli.yml @@ -0,0 +1,10 @@ +--- +- name: ensure timezone is set in cli php.ini + lineinfile: dest=/etc/php5/cli/php.ini + regexp='date.timezone =' + line='date.timezone = {{ server.timezone }}' + +- name: enabling opcache cli + lineinfile: dest=/etc/php5/cli/php.ini + regexp=';?opcache.enable_cli=\d' + line='opcache.enable_cli=1' diff --git a/resources/ansible/roles/php/tasks/php-fpm.yml b/resources/ansible/roles/php/tasks/php-fpm.yml new file mode 100644 index 0000000000..ca7eac39f5 --- /dev/null +++ b/resources/ansible/roles/php/tasks/php-fpm.yml @@ -0,0 +1,19 @@ +--- +- name: Set permissions on socket - owner + lineinfile: "dest=/etc/php5/fpm/pool.d/www.conf state=present regexp='^;?listen.owner' line='listen.owner = www-data'" + +- name: Set permissions on socket - group + lineinfile: "dest=/etc/php5/fpm/pool.d/www.conf state=present regexp='^;?listen.group' line='listen.group = www-data'" + +- name: Set permissions on socket - mode + lineinfile: "dest=/etc/php5/fpm/pool.d/www.conf state=present regexp='^;?listen.mode' line='listen.mode = 0660'" + notify: restart php5-fpm + +- name: ensure timezone is set in fpm php.ini + lineinfile: dest=/etc/php5/fpm/php.ini + regexp='date.timezone =' + line='date.timezone = {{ server.timezone }}' +- name: enabling opcache + lineinfile: dest=/etc/php5/fpm/php.ini + regexp=';?opcache.enable=\d' + line='opcache.enable=1' diff --git a/resources/ansible/roles/php/templates/extension.tpl b/resources/ansible/roles/php/templates/extension.tpl new file mode 100644 index 0000000000..1b13534767 --- /dev/null +++ b/resources/ansible/roles/php/templates/extension.tpl @@ -0,0 +1,2 @@ +; Configuration for php PECL {{ item }} extension +extension={{ item }}.so diff --git a/resources/ansible/roles/server/tasks/main.yml b/resources/ansible/roles/server/tasks/main.yml new file mode 100644 index 0000000000..f1ffc08660 --- /dev/null +++ b/resources/ansible/roles/server/tasks/main.yml @@ -0,0 +1,31 @@ +--- +- name: Update apt + sudo: yes + apt: update_cache=yes + +- name: Install System Packages + sudo: yes + apt: pkg={{ item }} state=latest + with_items: + - curl + - wget + - python-software-properties + +- name: Install Extra Packages + sudo: yes + apt: pkg={{ item }} state=latest + with_items: server.packages + when: server.packages is defined + +- name: Configure the timezone + sudo: yes + template: src=timezone.tpl dest=/etc/timezone + +- name: More Configure the timezone + sudo: yes + file: src=/usr/share/zoneinfo/{{server.timezone}} dest=/etc/localtime state=link force=yes backup=yes + +- name: Set default system language pack + shell: locale-gen {{server.locale}} + sudo: yes + diff --git a/resources/ansible/roles/server/templates/timezone.tpl b/resources/ansible/roles/server/templates/timezone.tpl new file mode 100644 index 0000000000..cca236521e --- /dev/null +++ b/resources/ansible/roles/server/templates/timezone.tpl @@ -0,0 +1 @@ +{{server.timezone}} diff --git a/resources/ansible/roles/vagrant_local/tasks/main.yml b/resources/ansible/roles/vagrant_local/tasks/main.yml new file mode 100644 index 0000000000..cd53609cff --- /dev/null +++ b/resources/ansible/roles/vagrant_local/tasks/main.yml @@ -0,0 +1,11 @@ +--- +- name: Set the hostname in /etc/hostname + shell: echo {{ vagrant_local.vm.hostname }} > /etc/hostname + when: vagrant_local.vm.hostname is defined + +- name: Set the hostname + shell: hostname {{ vagrant_local.vm.hostname }} + when: vagrant_local.vm.hostname is defined + +- name: Update /etc/hosts + lineinfile: dest=/etc/hosts regexp='^127\.0\.0\.1' line='127.0.0.1 localhost {{ vagrant_local.vm.hostname }}' owner=root group=root mode=0644 diff --git a/resources/ansible/roles/xdebug/defaults/main.yml b/resources/ansible/roles/xdebug/defaults/main.yml new file mode 100644 index 0000000000..091dc57bf0 --- /dev/null +++ b/resources/ansible/roles/xdebug/defaults/main.yml @@ -0,0 +1,5 @@ +--- +xdebug: + settings: + remote_enable: On + remote_connect_back: On diff --git a/resources/ansible/roles/xdebug/tasks/main.yml b/resources/ansible/roles/xdebug/tasks/main.yml new file mode 100644 index 0000000000..e38815d001 --- /dev/null +++ b/resources/ansible/roles/xdebug/tasks/main.yml @@ -0,0 +1,4 @@ +--- +- name: Install xDebug + sudo: yes + apt: pkg=php5-xdebug state=latest diff --git a/resources/ansible/vars/all.yml b/resources/ansible/vars/all.yml new file mode 100644 index 0000000000..687ca0e3cf --- /dev/null +++ b/resources/ansible/vars/all.yml @@ -0,0 +1,35 @@ +--- +server: + install: '1' + packages: [vim, git, imagemagick, htop, nodejs, npm, iotop, pkg-config, libzmq3-dev] + timezone: UTC + locale: fr_FR.UTF-8 +vagrant_local: + install: '1' + vm: { base_box: trusty64, hostname: phraseanet.dev, ip: 192.168.56.101, memory: '4096', sharedfolder: ./, useVagrantCloud: '1', syncType: nfs } +nginx: + install: '1' + docroot: /vagrant + servername: master.phraseanet.vb +mariadb: + install: '1' + root_password: toor + database: ab_master + user: phraseanet + password: phraseanet + dump: '' +elasticsearch: + install: '1' + port: '9200' + version: 1.5.2 +php: + install: '1' + ppa: php5 + packages: [php5-cli, php5-intl, php5-mcrypt, php5-enchant, php5-gd, php5-imagick, php5-memcache, php5-memcached, php5-curl, php5-mysql, php5-sqlite] + pecl_packages: + - {name: zmq, package: zmq-beta} +xdebug: + install: '1' +composer: + install: '1' + diff --git a/resources/ansible/windows.sh b/resources/ansible/windows.sh new file mode 100644 index 0000000000..eab5d9a5bf --- /dev/null +++ b/resources/ansible/windows.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +# Update Repositories +sudo apt-get update + +# Determine Ubuntu Version +. /etc/lsb-release + +# Decide on package to install for `add-apt-repository` command +# +# USE_COMMON=1 when using a distribution over 12.04 +# USE_COMMON=0 when using a distribution at 12.04 or older +USE_COMMON=$(echo "$DISTRIB_RELEASE > 12.04" | bc) + +if [ "$USE_COMMON" -eq "1" ]; +then + sudo apt-get install -y software-properties-common +else + sudo apt-get install -y python-software-properties +fi + +# Add Ansible Repository & Install Ansible +sudo add-apt-repository -y ppa:ansible/ansible +sudo apt-get update +sudo apt-get install -y ansible + +# Setup Ansible for Local Use and Run +cp /vagrant/ansible/inventories/dev /etc/ansible/hosts -f +chmod 666 /etc/ansible/hosts +cat /vagrant/ansible/files/authorized_keys >> /home/vagrant/.ssh/authorized_keys +sudo ansible-playbook /vagrant/ansible/playbook.yml -e hostname=$1 --connection=local \ No newline at end of file