3 years agogitlab: Setup sidekiq service
Kirill Smelkov [Fri, 8 Jan 2016 09:23:55 +0000 (12:23 +0300)]
gitlab: Setup sidekiq service

Sidekiq[1] is used in GitLab as background jobs manager - i.e. if a
request handler needs to spawn some non-light job - it adds it to
sidekiq queue (in Redis) and relies on sidekiq service to later pick
this job up and execute it.

The service is setup with just to run bin/gitlab-sidekiq with
appropriate queues (extracted from omnibus-gitlab) and appropriate
settings to controlling GitLab's sidekiq Out-Of-Memory killer[2].

NOTE Unlike unicorn OOM killer, Sidekiq memory killer just makes sidekiq
    processes to be SIGKILL terminated and relies on managing service to
    restart it. In slapos we don't have mechanism to set autorestart=true,
    nor bang/watchdog currently work with slapproxy, so we setup to do
    such monitoring ourselves manually with here-introduced
    watcher-sigkill program.

NOTE2 sidekiq promise, because it is rake/gitlab based, is slow to
    load/run and thus is put into etc/promise.slow/


/cc @kazuhiko, @jerome

3 years agogitlab: Upgrade gitlab-shell & gitlab-workhorse to versions which propagate $HOME
Kirill Smelkov [Thu, 7 Jan 2016 21:37:50 +0000 (00:37 +0300)]
gitlab: Upgrade gitlab-shell & gitlab-workhorse to versions which propagate $HOME

As was described in the previous patch, we need $HOME to be propagated
by this programs so that git can find partition's .gitconfig.

Specifically we need the following patches to be present in our build:

They both have been applied upstream very close to revisions we
previously had in software.cfg, so we only need to update the revisions
to get them.

/cc @kazuhiko, @jerome

3 years agogitlab: Slapos'ify / tweak gitconfig and hook it into the system
Kirill Smelkov [Thu, 7 Jan 2016 21:19:54 +0000 (00:19 +0300)]
gitlab: Slapos'ify / tweak gitconfig and hook it into the system

Convert gitconfig template to jinja2 (reusing already-there
`email_display_name` and `email_from` parameters for commits generated by

System-level git config from gitlab-omnibus is also imported to this
file (on slapos we cannot tweak system-level git config -
software/.../parts/git/... is read-only for programs in instance
partitions - so we move all gitlab's system-wide git settings to this
"user-level" gitconfig.

System gitconfig in omnibus is defined here:

so it is

    pack.threads = 1    and
    receive.fsckObjects = true

which makes sense to not waste a lot of memory when packing and not to
allow corrupt objects to enter to system by evil users intentionally.

To make the file foundable by git - we put it into partition root
directory and set $HOME to point to partition root when running
appropriate programs / services.

NOTE we'll need to upgrade gitlab-shell and gitlab-workhorse to
    propagate $HOME for this setting to actually have effect.
    See the next patch.

/cc @kazuhiko, @jerome

3 years agogitlab: Import gitconfig from omnibus-gitlab
Kirill Smelkov [Thu, 7 Jan 2016 21:13:31 +0000 (00:13 +0300)]
gitlab: Import gitconfig from omnibus-gitlab

Like with Rails configuration files, this is pristine import of template
gitconfig from omnibus GitLab from

This is only a "user" part of git configuration. System-wide
configuration is generated dynamically:

and we'll import it by hand in the follow-up patches.

/cc @kazuhiko, @jerome

3 years agogitlab: Setup gitlab-workhorse service
Kirill Smelkov [Thu, 7 Jan 2016 20:49:39 +0000 (23:49 +0300)]
gitlab: Setup gitlab-workhorse service

Gitlab-workhorse[1] is a service which offloads Ruby-on-Rails based
GitLab from long-running and slow requests. It is written in Go.

Now as we have unicorn service set up, we can setup gitlab-workhorse
service (which uses unicorn as authentication backend).

Gitlab-workhorse setup is easy - it is just one program and several
command line options to point to unicorn socket and to configure on
which unix socket gitlab-workhorse will listen itself.

NOTE we have to care that git and ruby to be on PATH when running
    gitlab-workhorse - because on e.g. git push'ing workhorse will run `git
    receive-pack` and a hook will be called which calls gitlab-shell,
    which is written in ruby.

NOTE2 promise to check whether gitlab-workhorse is alive is to ping it
    via URL to non-existent endpoint and check for proper 403 HTTP code


/cc @kazuhiko, @jerome

3 years agogitlab: Compile assets on instantiation and make sure DB is properly setup/migrated...
Kirill Smelkov [Thu, 7 Jan 2016 20:04:23 +0000 (23:04 +0300)]
gitlab: Compile assets on instantiation and make sure DB is properly setup/migrated before unicorn runs

There are several actions that needs to be done on gitlab instance

    - we have to (re-)compile assets
    - we have to migrate DB

and also before the first run

    - we have to initialize DB

We can compile assets as part of instantiation process, but regarding
DB migration / setup - it is not currently possible to do that as part
of instantiation - for that operations we need PG & Redis to be already
running, but the first time slapos instantiates an SR it first prepares
all services, and only after instantiation is done, starts them all. There is
currently no way to hook into starting process, and run some scripts
after one service is started but before another service startup...

So the solution is: to perform such actions in delayed mode as part of
application - unicorn service - startup: it makes sure PG is running and
initializes it and does other actions which needs to be done to migrate
the DB. Only if/after they succeed the main application is started.

NOTE the comment about unicorn/gitlab startup slowness from the previous
    patch still holds true - so in order to get "all ok" after
    instantiation, it is required to perform the instantiation several
    times, because unicorn promise initially fails.

/cc @kazuhiko, @jerome

3 years agogitlab: Set up unicorn service
Kirill Smelkov [Thu, 7 Jan 2016 19:36:08 +0000 (22:36 +0300)]
gitlab: Set up unicorn service

Now that all gitlab Rails application configuration files are ready, we
can setup unicorn service to start it.

NOTE there is a promise to check unicorn by url which works, but there
    are also rake tasks to check gitlab itself, e.g. like


    Unfortunately this tasks are slow to run (and gitlab:repo:check is
    very slow to run). That's why we do not put them into etc/promise/ -
    if we do - slapos reports promises time outs.

    What we do is we put them into etc/promise.slow/ so we have those
    scripts ready, but currently no one automatically checks them.

    Again, the promise to check unicorn just by accessing it by URL is
    there and is checked automatically out of the box.

NOTE2 GitLab is very slow to load. That's why it can take some time
    after unicorn starts that it's promise start to report ok. This can
    show itself as temporary instantiation errors which say promise such and
    such failed.

NOTE3 Unicorn start, but so far we did not cared to setup GitLab DB
    schema on instantiation. That's why unicorn remains not very usable
    and a lot of requests fail. We'll teach instance to setup DB and
    perform all other needed settings in the next patch.

/cc @kazuhiko, @jerome

3 years agogitlab: Add helper to set up promise to check something via url
Kirill Smelkov [Thu, 7 Jan 2016 18:54:00 +0000 (21:54 +0300)]
gitlab: Add helper to set up promise to check something via url

Like with [promise-wrapper] a recipe could do

    <= promise-byurl
    url     = ...

and a script to check such ur will be generated and automatically put
into etc/promise/<service>.

/cc @kazuhiko, @jerome

3 years agogitlab/unicorn: Automatically load all available CPUs by default
Kirill Smelkov [Thu, 7 Jan 2016 18:44:10 +0000 (21:44 +0300)]
gitlab/unicorn: Automatically load all available CPUs by default

Automatically configure unicorn to spawn as much worker processes as
there are CPUs on the system by default.

GitLab omnibus pre-hardcodes this value default to 2 (which we copied)
and then also tweaks it this way in active code

which we also do here.

/cc @kazuhiko, @jerome

3 years agogitlab/gitlab-shell-config.yml: Explicitly point it to secret file
Kirill Smelkov [Thu, 7 Jan 2016 18:33:32 +0000 (21:33 +0300)]
gitlab/gitlab-shell-config.yml: Explicitly point it to secret file

Explicitly point gitlab-shell to location where we keep secrets.

We already pointeg gitlab to that place and now we do that for
gitlab-shell so those 2 peieces can connect to each other ok.

Regarding the setting itself - there is no such block in omnibus-gitlab,
but it is present in gitlab-shell configuration example:

/cc @kazuhiko, @jerome

3 years agogitlab/gitlab-shell-config.yml: Slapos'ify it
Kirill Smelkov [Thu, 7 Jan 2016 18:21:50 +0000 (21:21 +0300)]
gitlab/gitlab-shell-config.yml: Slapos'ify it

Convert gitlab-shell configuration file to slapos:

    - convert to jinja2,
    - connect gitlab-shell to unicorn & redis unix sockets


    - http_settings are left to be default (empty) ones - as that works ok.
    - `auth_file` is still configured to point to wont-be-used sshkeys
      file, as without it gitlab-shell check will fail.
    - support for audit_usernames and git_annex is disabled and
      remains not configurable.

/cc @kazuhiko, @jerome

3 years agogitlab/unicorn.rb: Configure preload_app and pre-/post- forking actions
Kirill Smelkov [Thu, 7 Jan 2016 17:47:54 +0000 (20:47 +0300)]
gitlab/unicorn.rb: Configure preload_app and pre-/post- forking actions

Unicorn is a forking server with the idea that master process preloads
heavy Ruby-on-Rails application, and then to handle new request a worker
process is forked with application already loaded in its memory (and
modification being tracked by OS via copy-on-write).

From this point of view the only reasonable value for preload_app is
always "true" and omnibus-gitlab does this:

Then unicorn documentation shows what code has to be there in pre-/post-
forking event:

GitLab uses only part of it that "allows a new master process to
incrementally phase out the old master process with SIGTTOU to avoid a
thundering herd":

but strangely does not use code parts that are "highly recommended" or
"require" for "Rails + "preload_app true"" case.

For the reference I've added such codes, but kept them being commented

/cc @kazuhiko, @jerome

3 years agogitlab/unicorn.rb: First round of slaposification
Kirill Smelkov [Thu, 7 Jan 2016 17:34:35 +0000 (20:34 +0300)]
gitlab/unicorn.rb: First round of slaposification

Convert unicorn parameters to slapos and configure it to listen on unix
socket only.

( Omnibus configures unicorn to listen on unix socket and
  loopback TCP, mainly because gitlab-shell could not connect to unicorn
  via unix socket until recently:

  But as it can now, there is no point to keep on TCP port open )

To be able to do such configuration we add stub to unicorn service
section (to create needed directories where to keep the socket).

There will be follow-up patch which configures unicorn pre/post-forking
actions, which is not trivial and thus better be done on its own.

/cc @kazuhiko, @jerome

3 years agogitlab/gitlab.yml: Slapos'ify rest of it
Kirill Smelkov [Thu, 7 Jan 2016 16:54:42 +0000 (19:54 +0300)]
gitlab/gitlab.yml: Slapos'ify rest of it

Convert the rest of this configuration file to slapos.

It is straightforward conversion of parameters except:

    - access-via-ssh is disabled (gitlab slapos version does not support
      ssh access and supports HTTP(S) only by design on purpose)

    - we do not support restricting possible projects visibility via
      instance parameter (very low chance this will be needed in

    - default issue-closing pattern is just ok for now and not

    - support for builds, build artifacts & CI is disabled (we do not
      support CI (yet ?))

    - some internal defaults are just ok (e.g. where to organize
      directory for keeping repositories archives for downloads)

    - reply-by-email is not supported (yet ?)

    - we do not support LFS (yet ?) - just plain git hosting is ok for now.

    - Gravatar defaults are ok for now and not configurable.

    - Support for LDAP is disabled

    - Support for Kerberos is disabled

    - Support for OmniAuth is disabled

    - Satellites path is just /dev/null as we start from version where
      satellites are already non-existent.

    - Uploading backups to somewhere via GitLab's builtin mechanism is
      not supported - we'll use SlapOS native backup and resiliency for

    - Support for Google analytics is disabled.

    - Support for Piwik is disabled.

    - we are ok (for now) with default rack-attack git settings

/cc @kazuhiko, @jerome

3 years agogitlab: Determine current slapuserX in instance
Kirill Smelkov [Thu, 7 Jan 2016 16:41:10 +0000 (19:41 +0300)]
gitlab: Determine current slapuserX in instance

This user will need to be specified several times in configuration
files, as by default gitlab uses 'git' user and does "sudo" to it if it
is not current.

We will use {{ backend_info.user }} in the upcoming patches.

/cc @kazuhiko, @jerome

3 years agogitlab/gitlab.yml: Handle "external URL"
Kirill Smelkov [Thu, 7 Jan 2016 16:29:18 +0000 (19:29 +0300)]
gitlab/gitlab.yml: Handle "external URL"

GitLab has a notion of "external URL" - the canonical "frontend" URL the
server is reachable through: this URL is used as prefix to show
e.g. git-clone URL for repositories, etc, even if a server can be
reachable via several frontends.

Add external_url handling to slapos instance.

NOTE whether to use https or not is also defined by external_url, in
particular by external_url scheme.

/cc @kazuhiko, @jerome

3 years agogitlab/smtp_settings.rb: Convert/integrate to slapos
Kirill Smelkov [Thu, 7 Jan 2016 16:05:40 +0000 (19:05 +0300)]
gitlab/smtp_settings.rb: Convert/integrate to slapos

Convert to slapos SMTP settings for gitlab:

    - convert to jinja2
    - remove support for gitlab CI (we do not support it (yet ?))
    - add handling of `smtp_enable` parameter directly to that file
      ( omnibus handles this parameter externally and just removes
        smtp_settings.rb if it is true )

NOTE smtp_settings.rb contains SMTP password, so it is mode is set to 0600.

/cc @kazuhiko, @jerome

3 years agogitlab/rack_attack.rb: Convert/integrate to slapos
Kirill Smelkov [Thu, 7 Jan 2016 15:59:50 +0000 (18:59 +0300)]
gitlab/rack_attack.rb: Convert/integrate to slapos

Just another 2 simple parameters (attack detection tunables) conversion
to jinja2/slapos.

/cc @kazuhiko, @jerome

3 years agogitlab/ Convert/integrate to slapos
Kirill Smelkov [Thu, 7 Jan 2016 15:53:24 +0000 (18:53 +0300)]
gitlab/ Convert/integrate to slapos

Just convert 2 parameters used in that file to jinja syntax and add
those parameters (unicorn OOM killer tunables) to gitlab-parameters.cfg

/cc @kazuhiko, @jerome

3 years agogitlab/resque.yml: Tweak to integrate gitlab with internal redis
Kirill Smelkov [Thu, 7 Jan 2016 15:47:34 +0000 (18:47 +0300)]
gitlab/resque.yml: Tweak to integrate gitlab with internal redis

A simple change just to point resque to redis unix socket.

/cc @kazuhiko, @jerome

3 years agogitlab/database.yml: Tweak to integrate gitlab with internal postgresql
Kirill Smelkov [Thu, 7 Jan 2016 15:39:11 +0000 (18:39 +0300)]
gitlab/database.yml: Tweak to integrate gitlab with internal postgresql

We tweak database.yml to point to our postgresql unix socket; set
adapter to hardcoded postgresql, encoding to unicode and omit collation
(which according to omnibus-gitlab is used for mysql only).

The only instance parameter imported from omnibus is `db_pool` - how
many connection to a DB to keep open in a RoR thread/process.

XXX we use db's superuser as a user to connect. Is it ok to do even if
    the whole DB is used only for gitlab? (I think it is ok for the
    first iteration, but we'll probably need to refine this later)

/cc @kazuhiko, @jerome

3 years agogitlab: Introduce macro library
Kirill Smelkov [Thu, 7 Jan 2016 15:29:02 +0000 (18:29 +0300)]
gitlab: Introduce macro library

Introduce a library of Jinja2 macros that will be handy to use in
templates. For now we add only 2 macros:

    cfg(name)   - to get instance configuration parameter `name`,   and
    cfg_bool    - to get truth value of ----//----

The reason we introduce cfg() is that we will need to use a lot of
parameters in many places and it is much more handy to write, e.g.


compared to


/cc @kazuhiko, @jerome

3 years agogitlab: Organize place to keep parameters & their default imported from gitlab-omnibus
Kirill Smelkov [Thu, 7 Jan 2016 15:17:01 +0000 (18:17 +0300)]
gitlab: Organize place to keep parameters & their default imported from gitlab-omnibus

We will be using a several dozens of parameters to control gitlab
instance. It makes sense not to deviate in such parameters namings and
defaults from omnibus version.

Thus for such parameters - for clarity - we organize a separate file
where we will be keeping them - gitlab-parameters.cfg.

In this patch series all used parameters will be "imported" from
omnibus-gitlab 8.2.3+ce.0-0-g8eda093.

NOTE it is maybe better to try to autogenerate that file from upstream
    omnibus parameters definitions. If time will tell it becomes hard to
    maintain our copy - we'll consider going that way.

/cc @kazuhiko, @jerome

3 years agogitlab: Hook gitlab- and gitlab-shell- configuration files into the system
Kirill Smelkov [Thu, 7 Jan 2016 14:47:23 +0000 (17:47 +0300)]
gitlab: Hook gitlab- and gitlab-shell- configuration files into the system

- Download them on SR build and pass info to instance
- Instance prepares to process them as jinja2 templates
- Instance hooks the files into configuration location as appropriate

Every file so far is renamed *.erb -> *.in and a header added showing
that this file is autogenerated with links about what was the base
gitlab and/or omnibus version and omnibus reference revision this
template was last updated for.

So far all result configuration files are invalid - because ERB syntax
is there. We will convert the configuration files to proper jinja2
syntax and to using slapos parameters incrementally in the upcoming

NOTE (again): md5 sums are not yet fixed - we will fix them in the end
    of gitlab patches series after applying all tweaking changes.

/cc @kazuhiko, @jerome

3 years agogitlab: Import gitlab-ce & gitlab-shell configs from omnibus-gitlab
Kirill Smelkov [Thu, 7 Jan 2016 14:17:31 +0000 (17:17 +0300)]
gitlab: Import gitlab-ce & gitlab-shell configs from omnibus-gitlab

Pristine import of template configuration files from omnibus GitLab
package. All files were imported as-is in their ERB form and filenames
from omnibus-gitlab 8.2.3+ce.0-0-g8eda093 from here:

We will convert the templates to jinja2 and adjust them to slapos
version in the following patches.

Scheme for synchronizing with future upstream changes is envisioned as this:

    - checkout latest commit which updated pristine erb files
    - copy updated files from omnibus-gitlab, and commit the updates
    - checkout slapos master
    - merge commit that updated erb

That should reasonably work with not too-many conflicts and even those
should be not hard to resolve (with `git mergetool` e.g. in kdiff3)

/cc @kazuhiko, @jerome

3 years agogitlab: Organize per-instance gitlab work tree
Kirill Smelkov [Wed, 6 Jan 2016 20:07:20 +0000 (23:07 +0300)]
gitlab: Organize per-instance gitlab work tree

Organize per-instance place for gitlab configuration and work directory.

Unfortunately as GitLab is Ruby-on-Rails application, it is not possible
to keep its code in one place and have multiple separate configuration
sets in different places and start that code for a configuration set -
GitLab and Rails insist to get configuration from relative to source
code tree.

GitLab omnibus "solves" this by having only one configuration set and
having symlinks from code to that only configiration set. In slapos we
can potentially have several instances for one software and thus we
cannot do that.

With such limitations a proper solution would be to bind-mount software
code into instance filesystem namespace close to configuration - that
way the code will be only one and will find proper per-instance config.
Currently we do not have namespaces available on slapos unfortunately,
thus something else is needed.

The workaround I decided to do is this: to clone cloned gitlab
repository from software/ space to instance/ space and adjust it in
instance space. This has the following drawbacks:

    - code is duplicated
    - code becomes read-write, instead of being read-only

but imho it is the most practical thing to do. Another solution could be
to patch GitLab / Rails to remove "config lives in code" assumption, but
the number of places where this needs to be done is really many.

NOTE gems which gitlab uses and which were installed during software
    compilation are not duplicated - they are reused via bundler - via
    pointing BUNDLE_GEMFILE to original location in software.

NOTE2 For instance tasks and also for maintanace convenience we establish
    <instance>/bin/gitlab-* programs, e.g. gitlab-rake, which e.g. for
    gitlab-rake will run rake with correctly loaded gitlab environment -
    like in gitlab-omnibus.

/cc @kazuhiko, @jerome, @jp

3 years agogitlab: Redis service
Kirill Smelkov [Wed, 6 Jan 2016 19:23:51 +0000 (22:23 +0300)]
gitlab: Redis service

Organize internal Redis service, like with PostgreSQL in the previous
patch, with the help of slapos.cookbook:redis.server recipe.

Like with postgresql, and as we planned, redis listens only on
internal-to-partition unix socket.

The recipe establishes both service and promise to check it is alive;
we only need to setup log rotation manually.

/cc @kazuhiko, @jerome

3 years agogitlab: PostgreSQL service
Kirill Smelkov [Wed, 6 Jan 2016 19:00:31 +0000 (22:00 +0300)]
gitlab: PostgreSQL service

Organize internal PostgreSQL database which will be used as DB for
Roby-on-Rails GitLab and listens only on unix socket (for security and
performance reasons - see earlier intro patch).

To do it we use slapos.cookbook:postgres recipe, with disabling
"listen-to-network" via passing empty sets to ipv4 and ipv6 recipe

The promise to check whether DB is alive is just `psql -c '\q'` which
will error if failing to connect to DB, but exit silently if connected ok.

Explicit log rotation is not needed - as postgresql logs to
stdout/stderr - not to a file - logs are handled by slapos - put into
.slappartX_postgresql.log and automatically rotated there.

XXX omnibus-gitlab tunes postgresql with shared_buffers and other
parameters, most likely for performance reasons - see e.g.

I decided not to fine-tune postgresql for now, and get on-field feedback
first, and then, if needed, we can tune.

/cc @kazuhiko, @jerome

3 years agogitlab: Add helper for setting up promises
Kirill Smelkov [Wed, 6 Jan 2016 18:49:43 +0000 (21:49 +0300)]
gitlab: Add helper for setting up promises

A recipe could do

    <= promise-wrapper
    command-line = ...

and the wrapper will be put automatiaclly into etc/promise/<service>.

( for this to happen !py! magic is used again, like we did for logrotate
  and cron entries before )

/cc @kazuhiko, @jerome

3 years agogitlab: Make a plan to base instance layout on gitlab-omnibus and to interconnect...
Kirill Smelkov [Wed, 6 Jan 2016 18:34:27 +0000 (21:34 +0300)]
gitlab: Make a plan to base instance layout on gitlab-omnibus and to interconnect all internal services via unix sockets

Upcoming changes will follow two points:

- we try to base our gitlab setup on how it is done in
  gitlab-omnibus[1] with the idea to ease tracking upstream changes to
  instance setup.

- we will interconnect all internal services via unix sockets only.

  The reason to do it is twofold:

    1. easier security: currently files on different slapos partitions
       are isolated from each other, but there is no "in-between-partitions"
       networking isolation - thus (potentially evil) programs can
       access internal services on other slapos partition.

       permissions to access unix sockets, on the other hand, are
       managed by filesystem-level permissions, and thus unix sockets in
       one partition will be, by default, isolated from programs on
       another partitions.

    2. It is well known that UNIX sockets are faster than TCP over
       loopback. For example for our std shuttles they have 2 times lower
       latency and ~ 2-3 times more throughput compared to TCP over loopback

    More details on 1 & 2 can be found e.g. here:

/cc @kazuhiko, @jerome


3 years agogitlab: Add empty instance
Kirill Smelkov [Wed, 6 Jan 2016 17:58:22 +0000 (20:58 +0300)]
gitlab: Add empty instance

Add stub instance configuration which just establishes a way to have
several software types(*), pass all needed info from software to
instance, organizes base directory and establishes log rotation base for
upcoming services.

Log rotation is done with the help of cron periodicallly calling
logrotate. The rotation is done in "copytruncate" mode - i.e. log file
is not moved away and signal sent for service to reopen it, but instead
log content is just copied to outside and there is no need for a service
to reopen it's log file.

The reason it is done this way, is that there is a chance of not
handling such "reopen-log-file" callbacks correctly on a service side,
and so the net is full of crashing reports, e.g. like this:

That's why we take a safer approach instead, even if "copytruncate" mode
is risking to loose several log entries(**) on rotation.

NOTE services will organize log rotation with just

    <= logrotate-entry
    log     = path/to/log/files/*.log

For this to work some "!py!" magic (our way to serialize object into
executable python and process it in buildout recipes) is used to process
section names.

The approach trick is also used for cron, e.g. logrotate registers to
cron this way:

    <= cron-entry
    time    = daily
    command = ${logrotate:wrapper}

NOTE2 instance md5 are not fixed yet - we'll fix them after applying all
    patches in gitlab series.

(*) for now there is only 1 - "gitlab", but we'll need to have "-export"
    and "-import" for resiliency in the future.

(**) ideally such things should be done with logfs - a filesystem
    specializeing in logging - for client services it will look like as
    they just continue to write to log file, and on log service side, the
    rotation can happen, all transparent to client service.

/cc @kazuhiko, @jerome

3 years agoStart of GitLab Software Release
Kirill Smelkov [Wed, 6 Jan 2016 17:01:15 +0000 (20:01 +0300)]
Start of GitLab Software Release

First step - build all needed software. We build:

- Git
- PostgreSQL 9.2
- Redis 2.8
- Nginx

- gitlab-shell
- gitlab-workhorse
- gitlab-ce 8.2 itself

and everything which is needed to build the above programs.

Git is needed because GitLab is a git-hosting service and uses git
underneath. PostgreSQL is used as DB by gitlab and Redis as a cache.

GitLab-shell is a small project to manage ssh access to the service
(we'll disable ssh though) and to perform all "change a repository"

GitLab-workhorse is a service which offloads long-running or slow
request from main GitLab service.

GitLab-ce is the main Ruby-on-Rails-based web application.

Ruby- and Go- based programs are built in a way similar to:

    - 31a45a94    (helloworld & helloweb: Ruby version), and
    - 24e82414    (helloworld & helloweb: Go version)

Version of all components, except Git, were picked the same, as used by
gitlab omnibus v8.2 .

/cc @kazuhiko, @jerome

3 years agoversion up: ca-certificates 20151214
Julien Muchembled [Mon, 4 Jan 2016 17:54:56 +0000 (18:54 +0100)]
version up: ca-certificates 20151214

3 years agoversion up : MariaDB 10.1.10.
Kazuhiko Shiozaki [Thu, 24 Dec 2015 10:24:18 +0000 (11:24 +0100)]
version up : MariaDB 10.1.10.

3 years agomariadb: enable innodb lzma compression and disable some options explicitly.
Kazuhiko Shiozaki [Thu, 24 Dec 2015 10:06:54 +0000 (11:06 +0100)]
mariadb: enable innodb lzma compression and disable some options explicitly.

3 years agoharfbuzz: build without ICU.
Kazuhiko Shiozaki [Thu, 24 Dec 2015 09:40:16 +0000 (10:40 +0100)]
harfbuzz: build without ICU.

3 years agopython2.7: disable building some modules explicitly.
Kazuhiko Shiozaki [Wed, 23 Dec 2015 20:05:46 +0000 (21:05 +0100)]
python2.7: disable building some modules explicitly.

3 years agoNew component for OBS builds: chrpath
Julien Muchembled [Sat, 26 Dec 2015 21:07:22 +0000 (22:07 +0100)]
New component for OBS builds: chrpath

Some dists like SLE_12 don't seem to have it.

3 years agore6stnet: update and cleanup
Julien Muchembled [Fri, 18 Dec 2015 18:22:14 +0000 (19:22 +0100)]
re6stnet: update and cleanup

../../stack/slapos.cfg is removed from component/*/buildout.cfg
because we normally don't specify it in component/
The OBS package will need to extend it.

3 years agoJupyter: Version up eggs and update erp5_kernel accordingly
Ayush Tiwari [Mon, 14 Dec 2015 17:57:41 +0000 (17:57 +0000)]
Jupyter: Version up eggs and update erp5_kernel accordingly

Pin versions required for ipython==4.0.0 with ipykernel separated
from ipython eggs.
The split was in accordance to :

/reviewed-by @kirr  (on nexedi/slapos!33)

3 years agoversion up : Python 2.7.11.
Kazuhiko Shiozaki [Fri, 18 Dec 2015 11:05:06 +0000 (12:05 +0100)]
version up : Python 2.7.11.

3 years agoversion up eggs.
Kazuhiko Shiozaki [Thu, 17 Dec 2015 08:50:24 +0000 (09:50 +0100)]
version up eggs.

3 years agohaproxy: explicitly enable USE_DL, that is required at least in Ubuntu 15.10.
Kazuhiko Shiozaki [Thu, 17 Dec 2015 10:42:37 +0000 (11:42 +0100)]
haproxy: explicitly enable USE_DL, that is required at least in Ubuntu 15.10.

3 years agoerp5 kernel jupyter
Ayush Tiwari [Fri, 18 Dec 2015 21:21:05 +0000 (00:21 +0300)]
erp5 kernel jupyter

ipython_notebook SR hooked with ERP5 kernel.
This kernel helps in interaction between erp5 and Jupyter frontend.
The patches have been cleaned up


- All the code execution is being done at erp5 side, Jupyter just acts as dumb client.
- Receives result as string and its mime_type and thanks to kernel, displays it accordingly.
- Interactions b/w erp5 and Jupyter frontend are based on HTTP requests.

Major changes:

- Addition of erp5 kernel
- Improvement in code according to guidelines(name, section name)
- Use jinja template as instance file and make it more dynamic
- Debugging added for ipython_notebook service.

Note: The certificate authentication changed has been reverted to the previous
one(done by creating wrapper around openssl command) for now.

/cc @Tyagov
/reviewed-by @kirr, @jerome  (on nexedi/slapos!33)

3 years agoJupyter: --matplotlib=inline is nether supported nor needed
Kirill Smelkov [Tue, 1 Dec 2015 14:24:11 +0000 (14:24 +0000)]
Jupyter: --matplotlib=inline is nether supported nor needed

@jerome added --matplotlib=inline in 48eefab5 (ipython notebook) but it is
really neither needed:

   I remember adding this --matplotlib=inline line, but I am not sure it was
   ever needed. Using magic %matplotlib in notebook should be enough.

   Yeah, for inline matplotlib in default python kernel, magics do there
   work(therefore neither pylab nor matplotlib alias are needed while starting the
   server), so I'd say leave this commit as it is and regarding version updation:
   a new patch making change wherever required.

nor supported:

   $ cat .slappart0_ipython_notebook.log
   [W 15:51:35.454 NotebookApp] Unrecognized alias: '--matplotlib=inline', it will probably have no effect.

Remove it.


'--logfile' isn't available for ipython version 3.2.0 but we are not removing
it since we are planning to upgrade IPython to versions 4.x where it is supported.

Based on patch by @tiwariayush  (see nexedi/slapos!33)

3 years agoJupyter: Change section name to instance-jupyter so as not to raise conflict in case...
Ayush Tiwari [Wed, 2 Dec 2015 09:47:43 +0000 (09:47 +0000)]
Jupyter: Change section name to instance-jupyter so as not to raise conflict in case of multiple extends

/reviewed-by @kirr  (on nexedi/slapos!33)

3 years agoJupyter: Publish the serialized result
Ayush Tiwari [Wed, 2 Dec 2015 09:43:47 +0000 (09:43 +0000)]
Jupyter: Publish the serialized result

Maintain consistency with the slapOS SR format.
This SR can be hooked with other SR(ex:wendelin) and its better
to follow one way of publishing result parameters

[ kirr: This essentially changes publication format to JSON:

    $ xslapos proxy show --params

    # before
    slappart0: ipython_notebook (type default)
        url = https://[2001:67c:1254:e:49::952d]:8888
        monitor_url = https://[2001:67c:1254:e:49::952d]:9685

    # after
    slappart0: ipython_notebook (type default)
        _ = {"url": "https://[2001:67c:1254:e:49::952d]:8888", "monitor_url": "https://[2001:67c:1254:e:49::952d]:9685"}

  I'm not convinced we really need this, nor that the .serialized version is
  the most oftenly used one:

    slapos$ git grep 'slapos.cookbook:publish$' |wc -l
    slapos$ git grep 'slapos.cookbook:publish.serialised$' |wc -l

  but we can have it and see how it goes, reverting if needed ]

/cc @jerome
/proposed-for-review-on nexedi/slapos!33

3 years agoJupyter: Set log-level alias to 'DEBUG' for ipython notebook service
Ayush Tiwari [Wed, 2 Dec 2015 09:26:08 +0000 (09:26 +0000)]
Jupyter: Set log-level alias to 'DEBUG' for ipython notebook service

This helps in logging up the requests made by ipython_notebook service

[ kirr: To be clear - until log-level is set to DEBUG, IPython notebook does
  not log HTTP requests, and since logging of HTTP requests is considered normal
  for most of our services (Zope, Apache, etc), it makes sense to enable such
  functionality for notebook too.

  There is not much additional noise produced by --log-level=DEBUG - in
  practice ipython only prints what config files it uses on startup, so this
  should be ok to go. ]

/reviewed-by @kirr, @jerome  (on nexedi/slapos!33)

3 years agoJupyter: Hook ERP5 Kernel
Ayush Tiwari [Wed, 2 Dec 2015 09:17:57 +0000 (09:17 +0000)]
Jupyter: Hook ERP5 Kernel

ERP5 kernel basic info/workflow:

1. User enters code on notebook cell and executes
2. Code is sent to kernel via websockets
3. Kernel sends request to ERP5
4. Code is executed by ERP5 and the result is returned back via request.
5. Result is received and rendered on the notebook frontend.
6. Other message formats such as error and status are also conveyed by the Kernel.

[ kirr: in IPython notebook speak kernel is something that allows IPython
  notebook server side to talk to execution backend. ERP5 kernel is a thing that
  allows ipython notbook to talk to ERP5 (with help on-ERP5-server special bt5
  installed which accepts and executes commands).

  The bt5 to handle notebook calls on ERP5 side - erp5-data-notebook - is
  proposed to be merged into erp5.git on nexedi/erp5!29 ]

/initially-reviewed-by @kirr, @Tyagov  (in a lot of places, last time on nexedi/slapos!33)

3 years agoIPython Notebook: Explicitly add environment variable around wrapper and use ipython...
Ayush Tiwari [Thu, 3 Dec 2015 19:56:34 +0000 (19:56 +0000)]
IPython Notebook: Explicitly add environment variable around wrapper and use ipython directory inside instance in env

[ kirr: By default IPython keeps configuration and other files location in
  ~/.ipython . What this patch does is organize explicit directory in instance
  tree to keep such files  ]

/reviewed-by @kirr  (on nexedi/slapos!33)

3 years agoIPython Notebook: Add dynamic-template-base section for common jinja related file...
Ayush Tiwari [Thu, 3 Dec 2015 14:25:29 +0000 (14:25 +0000)]
IPython Notebook: Add dynamic-template-base section for common jinja related file section and extend them with this section

3 years agoIPython Notebook: Convert instance to jinja2 template
Ayush Tiwari [Thu, 3 Dec 2015 13:51:56 +0000 (13:51 +0000)]
IPython Notebook: Convert instance to jinja2 template

[ kirr: to-Jinja2 conversion is required because jinja is more suitable to
  describing instances compared to buildout, because jinja2 has e.g. control
  structures ]

/reviewed-by @kirr  (on nexedi/slapos!33)

3 years agowendelin: Adjust to recent ipython-notebook section renaming
Kirill Smelkov [Fri, 18 Dec 2015 07:54:43 +0000 (10:54 +0300)]
wendelin: Adjust to recent ipython-notebook section renaming

Commit cee110b2 (IPython Notebook: Fixing coding crimes for section
names) changed IPython notebook section name to use '-' as word
delimiter but forgot to update users, and this way wendelin build
started to fail:

    INFO While:
    INFO   Installing.
    INFO   Getting section ipython_notebook.
    INFO Error: The referenced section, 'ipython_notebook', was not defined.

Fix it. (And I've made sure with whole-tree git grep that there is no
more ipython notebook users except wendelin in whole slapos.git so far)

/reported-by @Tyagov
/cc @tiwariayush
/reviewed-by TrustMe

3 years agoncurse: add a patch for gcc 5.
Kazuhiko Shiozaki [Thu, 17 Dec 2015 09:09:22 +0000 (10:09 +0100)]
ncurse: add a patch for gcc 5.

3 years agoversion up : apache httpd 2.4.18.
Kazuhiko Shiozaki [Tue, 15 Dec 2015 12:26:19 +0000 (13:26 +0100)]
version up : apache httpd 2.4.18.

3 years agoversion up eggs.
Kazuhiko Shiozaki [Wed, 9 Dec 2015 10:38:46 +0000 (11:38 +0100)]
version up eggs.

3 years agomariadb: stop disabling derived_merge globally.
Kazuhiko Shiozaki [Tue, 8 Dec 2015 09:19:17 +0000 (10:19 +0100)]
mariadb: stop disabling derived_merge globally.

3 years agoMerge branch 'kvm-cluster'
Alain Takoudjou [Wed, 16 Dec 2015 15:08:52 +0000 (16:08 +0100)]
Merge branch 'kvm-cluster'

3 years agowendelin: Unpin wendelin.core from versions in -dev variant
Kirill Smelkov [Wed, 16 Dec 2015 08:30:56 +0000 (11:30 +0300)]
wendelin: Unpin wendelin.core from versions in -dev variant

This is required so that buildout does not fallback to installing
non-dev egg if version of wendelin.core from -dev differs from what has
been pinned.

For example the following

    extends =

    # pin wendelin.core-dev to latest assumed-good revision with ZBlk1 support
    revision = c507d9009f59fec2041bac9c31c5b08a48d3897d

will install wendelin.core-0.4.egg from pypi instead of installing
c507d9009f59fec2041bac9c31c5b08a48d3897d from repository, because that
latter revision says it is already version 0.5 and 1.0.12 wendelin SR
pins wendelin.core to 0.4 .

So unpin wendelin.core from versions and let software-dev.cfg work

/cc @klaus
/reviewed-by @Tyagov  (on nexedi/slapos!36)

3 years agoIPython Notebook: Add download-file-base section which would be extended by sections...
Ayush Tiwari [Thu, 3 Dec 2015 13:55:57 +0000 (13:55 +0000)]
IPython Notebook: Add download-file-base section which would be extended by sections requiring common usage

/reviewed-by @kirr  (on nexedi/slapos!33)

3 years agoIPython Notebook: Fix naming of files according to extensions, follow guidelines
Ayush Tiwari [Wed, 2 Dec 2015 08:03:34 +0000 (08:03 +0000)]
IPython Notebook: Fix naming of files according to extensions, follow guidelines

/reviewed-by @kirr  (on nexedi/slapos!33)

3 years agoIPython Notebook: Fixing coding crimes for section names
Ayush Tiwari [Thu, 3 Dec 2015 13:39:45 +0000 (13:39 +0000)]
IPython Notebook: Fixing coding crimes for section names

Use spinal-case('-' separated) instead of snake_case('_' separated) in section names.

/reviewed-by @kirr  (on nexedi/slapos!33)

3 years agokvm: Add restrict mode for nat interface kvm-cluster
Alain Takoudjou [Fri, 11 Dec 2015 18:17:21 +0000 (19:17 +0100)]
kvm: Add restrict mode for nat interface

If restrict mode is set to true, nat interface (eth0) will be isolated, no network access, only host and guest forward rules will work throught that interface.
This option is true by default for kvm-cluster, and false for single and resilient kvm.

3 years agoapache-frontend: Include backward compatibility with RootSoftwareInstance.
Rafael Monnerat [Wed, 9 Dec 2015 17:27:06 +0000 (18:27 +0100)]
apache-frontend: Include backward compatibility with RootSoftwareInstance.

3 years agoslapos/recipe/postgresql: Do not leave half-installed postgresql instance
Kirill Smelkov [Wed, 4 Nov 2015 08:59:36 +0000 (11:59 +0300)]
slapos/recipe/postgresql: Do not leave half-installed postgresql instance

In case there are errors when creating cluster / setting up its
configuration files, currently we leave pgsql database left
half-installed and next time instantiation runs do not do anything,
because os.path.exists(pgdata) is already true.

I've personally hit this situation via providing ipv4 and ipv6
parameters as strings and the recipe wanted to do `ipv4.join(ipv6)` but this
works only for sets and raises for strings.

What is worse is that the above error becomes hidden in our default
setup, because webrunner tries to do instantiation _several_ times, and
on the second run instantiation succeeds, because pgdata directory
already exists and recipe thinks there is nothing to do _and_ webrunner
already removed instance.log from previous run.

So do not hide errors, and if we see there are problems, remove the
wholly created pgsql database directory.

/cc @kazuhiko, @jerome
/proposed-for-review on nexedi/slapos!29

3 years agoslaprunner: Allow port forwarding for default ssh
Cédric Le Ninivin [Thu, 3 Dec 2015 12:58:39 +0000 (13:58 +0100)]
slaprunner: Allow port forwarding for default ssh

3 years agodropbear: Allow port forwarding if option is set
Cédric Le Ninivin [Thu, 3 Dec 2015 12:57:35 +0000 (13:57 +0100)]
dropbear: Allow port forwarding if option is set

3 years agoERP5: sort balancer families by name before assigning ports
Julien Muchembled [Wed, 9 Dec 2015 12:54:30 +0000 (13:54 +0100)]
ERP5: sort balancer families by name before assigning ports

If the list of families does not change, their ports must not change, and it's
wrong to get this by relying on CPython implementation details. Even if we
automated the update of frontends with new urls, this couldn't be done
atomically and we'd get random failures.

Currently, frontends are only updated manually so we also want to minimize
changes when families are added/renamed/removed. By sorting alphabetically,
we have something predictable. Of course, this does not cover cases like the
following one:
- before: A, B, C
- after: A, C
Even if we added a 'port-base' parameter for the balancer, the port would
change for one of the 2 families.

We have no need for the moment, but we could go further with an optional list
parameter to choose the order, and a special value to skip ports. Another
option is to use publish-early but it's more complicated to implement and
we lose everything when we reinstanciate.

The sort in is for the stats page.

3 years agoapache-frontend: software-type default goes to custom-personal
Alain Takoudjou [Tue, 8 Dec 2015 16:53:48 +0000 (17:53 +0100)]
apache-frontend: software-type default goes to custom-personal

3 years agoversion up eggs.
Kazuhiko Shiozaki [Mon, 2 Nov 2015 12:54:41 +0000 (13:54 +0100)]
version up eggs.

3 years agoversion up : groonga 5.1.0 and mroonga 5.10.
Kazuhiko Shiozaki [Tue, 1 Dec 2015 14:00:47 +0000 (15:00 +0100)]
version up : groonga 5.1.0 and mroonga 5.10.

3 years agoversion up: Products.LongRequestLogger 2.0.0
Julien Muchembled [Thu, 12 Nov 2015 14:28:15 +0000 (15:28 +0100)]
version up: Products.LongRequestLogger 2.0.0

3 years agoERP5: remove obsolete zope template files
Julien Muchembled [Thu, 12 Nov 2015 10:57:17 +0000 (11:57 +0100)]
ERP5: remove obsolete zope template files

3 years agoversion up : apache httpd 2.4.17.
Kazuhiko Shiozaki [Tue, 3 Nov 2015 19:13:32 +0000 (20:13 +0100)]
version up : apache httpd 2.4.17.

3 years agoversion up : groonga 5.0.9 and mroonga 5.09.
Kazuhiko Shiozaki [Thu, 29 Oct 2015 14:34:17 +0000 (15:34 +0100)]
version up : groonga 5.0.9 and mroonga 5.09.

3 years agoversion up : HAProxy 1.6.1, new majour version with better performance.
Kazuhiko Shiozaki [Mon, 26 Oct 2015 08:52:25 +0000 (09:52 +0100)]
version up : HAProxy 1.6.1, new majour version with better performance.

3 years agoversion up: lua 5.3.1. also fix a wrong rpath.
Kazuhiko Shiozaki [Sun, 25 Oct 2015 22:11:44 +0000 (23:11 +0100)]
version up: lua 5.3.1. also fix a wrong rpath.

3 years agohaproxy: use bind option to specify listen ip:port instead of putting it in 'listen...
Kazuhiko Shiozaki [Sun, 25 Oct 2015 22:09:29 +0000 (23:09 +0100)]
haproxy: use bind option to specify listen ip:port instead of putting it in 'listen' line.

that is a long-deprecated syntax and removed in haproxy 1.6.

3 years agoversion up : gdk-pixbuf 2.32.1. CVE-2015-7673, CVE-2015-7674.
Kazuhiko Shiozaki [Sun, 25 Oct 2015 18:32:23 +0000 (19:32 +0100)]
version up : gdk-pixbuf 2.32.1. CVE-2015-7673, CVE-2015-7674.

3 years agoMerge remote-tracking branch 'lab/master' into HEAD
Alain Takoudjou [Fri, 4 Dec 2015 17:04:26 +0000 (18:04 +0100)]
Merge remote-tracking branch 'lab/master' into HEAD

3 years agokvm: fix monitor parameters, set default keyboardf language to french (fr)
Alain Takoudjou [Fri, 4 Dec 2015 16:51:04 +0000 (17:51 +0100)]
kvm: fix monitor parameters, set default keyboardf language to french (fr)

3 years agoversion up : OpenSSL 1.0.2e, including CVE-2015-3193, CVE-2015-3194, CVE-2015-3195...
Kazuhiko Shiozaki [Fri, 4 Dec 2015 10:23:32 +0000 (11:23 +0100)]
version up : OpenSSL 1.0.2e, including CVE-2015-3193, CVE-2015-3194, CVE-2015-3195 and CVE-2015-3196.

3 years agogolang: v↑ (1.5.2)
Kirill Smelkov [Fri, 4 Dec 2015 08:17:10 +0000 (11:17 +0300)]
golang: v↑  (1.5.2)


    go1.5.2 (released 2015/12/02) includes bug fixes to the compiler,
    linker, and the mime/multipart, net, and runtime packages

/reviewed-by: TrustMe

3 years agocomponent/re6stnet: Fix extensions paths (again).
Rafael Monnerat [Thu, 3 Dec 2015 23:03:34 +0000 (00:03 +0100)]
component/re6stnet: Fix extensions paths (again).

3 years agocomponent/re6stnet: Fix extensions paths.
Rafael Monnerat [Thu, 3 Dec 2015 22:58:13 +0000 (23:58 +0100)]
component/re6stnet: Fix extensions paths.

3 years agocomponent/re6stnet: Split development (git) from stagged (egg) version.
Rafael Monnerat [Thu, 3 Dec 2015 18:08:45 +0000 (19:08 +0100)]
component/re6stnet: Split development (git) from stagged (egg) version.

3 years agokvm: fix bug when nat-rules parameter is empty, set nat-rules empty by default for...
Alain Takoudjou [Wed, 2 Dec 2015 10:21:46 +0000 (11:21 +0100)]
kvm: fix bug when nat-rules parameter is empty, set nat-rules empty by default for kvm-cluster

3 years agoerp5: Fix section entry name when requesting a frontend.
Vincent Pelletier [Tue, 1 Dec 2015 09:17:48 +0000 (10:17 +0100)]
erp5: Fix section entry name when requesting a frontend.

3 years agofix kvm resilience test: undefined python_executable
Alain Takoudjou [Mon, 30 Nov 2015 08:32:23 +0000 (09:32 +0100)]
fix kvm resilience test: undefined python_executable

3 years agoStart new development
Rafael Monnerat [Fri, 27 Nov 2015 15:54:56 +0000 (16:54 +0100)]
Start new development

3 years agoMinor adjustment to follow up recent changes.
Rafael Monnerat [Fri, 27 Nov 2015 15:44:28 +0000 (16:44 +0100)]
Minor adjustment to follow up recent changes.

3 years agoversion up: slapos.cookbook 1.0.17
Rafael Monnerat [Fri, 27 Nov 2015 15:43:13 +0000 (16:43 +0100)]
version up: slapos.cookbook 1.0.17

3 years agoRelease slapos.cookbook 1.0.17
Rafael Monnerat [Fri, 27 Nov 2015 15:48:05 +0000 (16:48 +0100)]
Release slapos.cookbook 1.0.17

3 years agoslapos.recipe.re6stmaster: More verbosity and update ips if they changed.
Rafael Monnerat [Fri, 27 Nov 2015 13:05:26 +0000 (21:05 +0800)]
slapos.recipe.re6stmaster: More verbosity and update ips if they changed.

3 years agovesion up: slapos.toolbox 0.53
Rafael Monnerat [Thu, 26 Nov 2015 19:12:52 +0000 (19:12 +0000)]
vesion up: slapos.toolbox 0.53

3 years agoagent: Minor typos and update wrong recipes.
Rafael Monnerat [Thu, 26 Nov 2015 18:43:46 +0000 (18:43 +0000)]
agent: Minor typos and update wrong recipes.

3 years agoagent has no recipe anymore.
Rafael Monnerat [Wed, 25 Nov 2015 21:23:03 +0000 (21:23 +0000)]
agent has no recipe anymore.

3 years agoagent: Refactor to follow up new implementation using ERP5 Task Distributor
Rafael Monnerat [Fri, 7 Aug 2015 17:45:32 +0000 (19:45 +0200)]
agent: Refactor to follow up new implementation using ERP5 Task Distributor

3 years agocheck-url: Quote $URL in -z check
Kirill Smelkov [Wed, 25 Nov 2015 12:43:33 +0000 (15:43 +0300)]
check-url: Quote $URL in -z check

If one wants to check URLs on UNIX-sockets, there is no full URL schema
in curl for this, but the following has to be used instead:

    curl --unix-socket /path/to/socket http:/<url-path>

For this to work, one can do e.g. the following trick:

    recipe  = slapos.cookbook:check_url_available
    url     = --unix-socket ${unicorn:socket}  http:/

but then generated promise scripts fails this way:

    ./etc/promise/unicorn: line 7: [: too many arguments

via quoting $URL in emptiness check we can support both usual URLs and
urls with --unix-socket prepended trick.

/reviewed-by @cedric.leninivin  (on nexedi/slapos!31)

3 years agocheck-url: Allow to specify expected HTTP code
Kirill Smelkov [Wed, 25 Nov 2015 12:38:18 +0000 (15:38 +0300)]
check-url: Allow to specify expected HTTP code

In gitlab SR a service I need to check - gitlab-workhorse, returns 200
only when request comes to some repository and authentication backend
allows it.

Requiring access to repositories is not very good just to check if the
service is alive, and also auth backend can be not alive, and initially
there are no repositories at all. So gitlab-workhorse is checked to be
alive by pinging it with non-existing URL and expecting 403.

For this to work we need to allow clients to specify expected HTTP code
instead of previously hardcoded 200 (which still remains the default).

/reviewed-by @cedric.leninivin  (on nexedi/slapos!31)