Packaging-related stuff
This commit is contained in:
parent
6eff2d759a
commit
f905dcfd8e
5
.gitignore
vendored
5
.gitignore
vendored
@ -1 +1,4 @@
|
||||
*.pyc
|
||||
*.pyc
|
||||
*.deb
|
||||
.vagrant
|
||||
work
|
38
Makefile
Normal file
38
Makefile
Normal file
@ -0,0 +1,38 @@
|
||||
|
||||
VERSION=0.1
|
||||
NAME=openstack-artifice
|
||||
INSTALL_PATH=/opt/stack/artifice
|
||||
BILLING_PROGRAM=bill.py
|
||||
BINARY_PATH=/usr/local/bin
|
||||
|
||||
clean:
|
||||
@rm -rf ./work
|
||||
@rm *.deb
|
||||
|
||||
init:
|
||||
@mkdir ./work/
|
||||
@mkdir -p ./work${INSTALL_PATH}
|
||||
@mkdir -p ./work${BINARY_PATH}
|
||||
|
||||
deb: clean init
|
||||
|
||||
@cp -r ./bin ./artifice ./scripts ./README.md ./INVOICES.md \
|
||||
requirements.txt setup.py ./work/${INSTALL_PATH}
|
||||
@ln -s ./work${INSTALL_PATH}/bin/${BILLING_PROGRAM} ./work${BINARY_PATH}/artifice-bill
|
||||
@fpm -s dir -t deb -n ${NAME} -v ${VERSION} \
|
||||
--pre-install=packaging/scripts/pre_install.sh \
|
||||
--post-install=packaging/scripts/post_install.sh \
|
||||
--deb-pre-depends postgresql-9.2 \
|
||||
--deb-pre-depends postgresql-server-dev-9.2 \
|
||||
--deb-pre-depends postgresql-contrib-9.2 \
|
||||
--deb-pre-depends pwgen \
|
||||
--deb-pre-depends python2.7 \
|
||||
--deb-pre-depends python-pip \
|
||||
--deb-pre-depends python-dev \
|
||||
--template-scripts \
|
||||
--template-value pg_database=artifice \
|
||||
--template-value pg_user=artifice \
|
||||
--template-value pg_port=5432 \
|
||||
--template-value install_path=${INSTALL_PATH} \
|
||||
-C ./work \
|
||||
.
|
112
Vagrantfile
vendored
Normal file
112
Vagrantfile
vendored
Normal file
@ -0,0 +1,112 @@
|
||||
# -*- mode: ruby -*-
|
||||
# vi: set ft=ruby :
|
||||
|
||||
Vagrant.configure("2") do |config|
|
||||
# All Vagrant configuration is done here. The most common configuration
|
||||
# options are documented and commented below. For a complete reference,
|
||||
# please see the online documentation at vagrantup.com.
|
||||
|
||||
# Every Vagrant virtual environment requires a box to build off of.
|
||||
config.vm.box = "precise64"
|
||||
config.vm.provision :shell, :path=>"./vagrant/bootstrap.sh"
|
||||
|
||||
# The url from where the 'config.vm.box' box will be fetched if it
|
||||
# doesn't already exist on the user's system.
|
||||
# config.vm.box_url = "http://domain.com/path/to/above.box"
|
||||
|
||||
# Create a forwarded port mapping which allows access to a specific port
|
||||
# within the machine from a port on the host machine. In the example below,
|
||||
# accessing "localhost:8080" will access port 80 on the guest machine.
|
||||
# config.vm.network :forwarded_port, guest: 80, host: 8080
|
||||
|
||||
# Create a private network, which allows host-only access to the machine
|
||||
# using a specific IP.
|
||||
# config.vm.network :private_network, ip: "192.168.33.10"
|
||||
|
||||
# Create a public network, which generally matched to bridged network.
|
||||
# Bridged networks make the machine appear as another physical device on
|
||||
# your network.
|
||||
# config.vm.network :public_network
|
||||
|
||||
# Share an additional folder to the guest VM. The first argument is
|
||||
# the path on the host to the actual folder. The second argument is
|
||||
# the path on the guest to mount the folder. And the optional third
|
||||
# argument is a set of non-required options.
|
||||
# config.vm.synced_folder "../data", "/vagrant_data"
|
||||
|
||||
# Provider-specific configuration so you can fine-tune various
|
||||
# backing providers for Vagrant. These expose provider-specific options.
|
||||
# Example for VirtualBox:
|
||||
#
|
||||
# config.vm.provider :virtualbox do |vb|
|
||||
# # Don't boot with headless mode
|
||||
# vb.gui = true
|
||||
#
|
||||
# # Use VBoxManage to customize the VM. For example to change memory:
|
||||
# vb.customize ["modifyvm", :id, "--memory", "1024"]
|
||||
# end
|
||||
#
|
||||
# View the documentation for the provider you're using for more
|
||||
# information on available options.
|
||||
|
||||
# Enable provisioning with Puppet stand alone. Puppet manifests
|
||||
# are contained in a directory path relative to this Vagrantfile.
|
||||
# You will need to create the manifests directory and a manifest in
|
||||
# the file base.pp in the manifests_path directory.
|
||||
#
|
||||
# An example Puppet manifest to provision the message of the day:
|
||||
#
|
||||
# # group { "puppet":
|
||||
# # ensure => "present",
|
||||
# # }
|
||||
# #
|
||||
# # File { owner => 0, group => 0, mode => 0644 }
|
||||
# #
|
||||
# # file { '/etc/motd':
|
||||
# # content => "Welcome to your Vagrant-built virtual machine!
|
||||
# # Managed by Puppet.\n"
|
||||
# # }
|
||||
#
|
||||
# config.vm.provision :puppet do |puppet|
|
||||
# puppet.manifests_path = "manifests"
|
||||
# puppet.manifest_file = "init.pp"
|
||||
# end
|
||||
|
||||
# Enable provisioning with chef solo, specifying a cookbooks path, roles
|
||||
# path, and data_bags path (all relative to this Vagrantfile), and adding
|
||||
# some recipes and/or roles.
|
||||
#
|
||||
# config.vm.provision :chef_solo do |chef|
|
||||
# chef.cookbooks_path = "../my-recipes/cookbooks"
|
||||
# chef.roles_path = "../my-recipes/roles"
|
||||
# chef.data_bags_path = "../my-recipes/data_bags"
|
||||
# chef.add_recipe "mysql"
|
||||
# chef.add_role "web"
|
||||
#
|
||||
# # You may also specify custom JSON attributes:
|
||||
# chef.json = { :mysql_password => "foo" }
|
||||
# end
|
||||
|
||||
# Enable provisioning with chef server, specifying the chef server URL,
|
||||
# and the path to the validation key (relative to this Vagrantfile).
|
||||
#
|
||||
# The Opscode Platform uses HTTPS. Substitute your organization for
|
||||
# ORGNAME in the URL and validation key.
|
||||
#
|
||||
# If you have your own Chef Server, use the appropriate URL, which may be
|
||||
# HTTP instead of HTTPS depending on your configuration. Also change the
|
||||
# validation key to validation.pem.
|
||||
#
|
||||
# config.vm.provision :chef_client do |chef|
|
||||
# chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
|
||||
# chef.validation_key_path = "ORGNAME-validator.pem"
|
||||
# end
|
||||
#
|
||||
# If you're using the Opscode platform, your validator client is
|
||||
# ORGNAME-validator, replacing ORGNAME with your organization name.
|
||||
#
|
||||
# If you have your own Chef Server, the default validation client name is
|
||||
# chef-validator, unless you changed the configuration.
|
||||
#
|
||||
# chef.validation_client_name = "ORGNAME-validator"
|
||||
end
|
12
packaging/scripts/post_install.sh
Normal file
12
packaging/scripts/post_install.sh
Normal file
@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
|
||||
PASSWORD=`cat <%= install_path %>/etc/artifice/database`
|
||||
|
||||
|
||||
export DATABASE_URL="postgresql://<%= pg_user %>:$PASSWORD@localhost:<%=pg_port%>/<%=pg_database%>"
|
||||
|
||||
pip install -r <%= install_path %>/requirements.txt
|
||||
|
||||
python <%= install_path %>/scripts/initdb.py
|
||||
|
||||
python <%= install_path%>/setup.py install # register with python!
|
20
packaging/scripts/pre_install.sh
Normal file
20
packaging/scripts/pre_install.sh
Normal file
@ -0,0 +1,20 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Loads a SQL script into postgres that creates the artifice DB.
|
||||
# Post-install script is going to load all the DB stuff via pythons
|
||||
|
||||
PASSWORD=`pwgen -s 16`
|
||||
|
||||
mkdir -p <%=install_path%>/etc/artifice
|
||||
touch <%=install_path%>/etc/artifice/database
|
||||
chmod 0600 <%=install_path%>/etc/artifice/database
|
||||
|
||||
echo $PASSWORD >> <%= install_path %>/etc/artifice/database
|
||||
|
||||
sudo -u postgres psql -d template1 <<EOF
|
||||
CREATE DATABASE <%=pg_database%>;
|
||||
\c <%=pg_database%>
|
||||
CREATE EXTENSION btree_gist;
|
||||
CREATE USER <%=pg_user%> WITH ENCRYPTED PASSWORD '$PASSWORD';
|
||||
ALTER DATABASE <%=pg_database%> OWNER TO <%=pg_user%>;
|
||||
EOF
|
@ -1,2 +1,3 @@
|
||||
sqlalchemy>=0.8
|
||||
psycopg2>=2.5.1
|
||||
psycopg2>=2.5.1
|
||||
requests==1.1.0
|
25
scripts/initdb.py
Normal file
25
scripts/initdb.py
Normal file
@ -0,0 +1,25 @@
|
||||
import sys, os
|
||||
|
||||
loc = None
|
||||
try:
|
||||
loc, fn = os.path.split(__file__)
|
||||
except NameError:
|
||||
loc = os.getcwd()
|
||||
|
||||
|
||||
sys.path.insert(0, os.path.abspath(os.path.join(loc +"/../artifice")))
|
||||
|
||||
from models import usage, resources, tenants, Session, Base
|
||||
# string = 'postgresql://%(username)s:%(password)s@%(host)s:%(port)s/%(database)s'
|
||||
# conn_string = string % {'username':'aurynn', 'host':'localhost', 'port':5433, 'password':'aurynn', 'database':'artifice'}
|
||||
|
||||
from sqlalchemy import MetaData, create_engine
|
||||
|
||||
import os
|
||||
|
||||
engine = create_engine( os.environ["DATABASE_URL"] )
|
||||
Session.configure(bind=engine)
|
||||
|
||||
s = Session()
|
||||
|
||||
Base.metadata.create_all(engine)
|
28
sources.list
Normal file
28
sources.list
Normal file
@ -0,0 +1,28 @@
|
||||
deb http://ubuntu.catalyst.net.nz/ubuntu/ precise main restricted
|
||||
deb-src http://ubuntu.catalyst.net.nz/ubuntu/ precise main restricted
|
||||
|
||||
deb http://ubuntu.catalyst.net.nz/ubuntu/ precise-updates main restricted
|
||||
deb-src http://ubuntu.catalyst.net.nz/ubuntu/ precise-updates main restricted
|
||||
|
||||
deb http://ubuntu.catalyst.net.nz/ubuntu/ precise universe
|
||||
deb-src http://ubuntu.catalyst.net.nz/ubuntu/ precise universe
|
||||
deb http://ubuntu.catalyst.net.nz/ubuntu/ precise-updates universe
|
||||
deb-src http://ubuntu.catalyst.net.nz/ubuntu/ precise-updates universe
|
||||
|
||||
deb http://ubuntu.catalyst.net.nz/ubuntu/ precise multiverse
|
||||
deb-src http://ubuntu.catalyst.net.nz/ubuntu/ precise multiverse
|
||||
deb http://ubuntu.catalyst.net.nz/ubuntu/ precise-updates multiverse
|
||||
deb-src http://ubuntu.catalyst.net.nz/ubuntu/ precise-updates multiverse
|
||||
|
||||
deb http://ubuntu.catalyst.net.nz/ubuntu/ precise-backports main restricted universe multiverse
|
||||
deb-src http://ubuntu.catalyst.net.nz/ubuntu/ precise-backports main restricted universe multiverse
|
||||
|
||||
deb http://security.ubuntu.com/ubuntu precise-security main restricted
|
||||
deb-src http://security.ubuntu.com/ubuntu precise-security main restricted
|
||||
deb http://security.ubuntu.com/ubuntu precise-security universe
|
||||
deb-src http://security.ubuntu.com/ubuntu precise-security universe
|
||||
deb http://security.ubuntu.com/ubuntu precise-security multiverse
|
||||
deb-src http://security.ubuntu.com/ubuntu precise-security multiverse
|
||||
|
||||
deb http://debian.catalyst.net.nz/catalyst stable catalyst
|
||||
deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main
|
12
vagrant/bootstrap.sh
Normal file
12
vagrant/bootstrap.sh
Normal file
@ -0,0 +1,12 @@
|
||||
cp /vagrant/sources.list /etc/apt/sources.list
|
||||
|
||||
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
|
||||
apt-key add -
|
||||
|
||||
apt-key advanced --keyserver pgp.net.nz --recv-keys 621846D9
|
||||
|
||||
aptitude update
|
||||
|
||||
aptitude install gdebi-core
|
||||
|
||||
gdebi -n /vagrant/openstack-artifice_0.1_amd64.deb
|
Loading…
x
Reference in New Issue
Block a user