Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewrite to support reverse proxy #677

Merged
merged 3 commits into from
Aug 30, 2019
Merged

Conversation

ekohl
Copy link
Member

@ekohl ekohl commented Oct 15, 2018

This doesn't implement the actual reverse proxy part, but it does make passenger optional and prepares the code for it.

# $passenger:: Configure foreman via apache and passenger
# $apache:: Configure Foreman via Apache. By default via passenger but otherwise as a reverse proxy.
#
# $passenger:: Whether to configure Apache with passenger or as a reverse proxy.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should these two conflict? or is the idea you need both now to get passenger?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This changes it so that the parameter is ignored if apache is false

Copy link
Contributor

@neomilium neomilium Aug 28, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A future-proof approach, if we consider multiple kind of setups, could be an Enum['apache+passenger', 'apache+puma', 'puma', 'nginx+passenger', 'nginx+puma'], what do you think about?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I like the idea of supporting nginx, I think it would be premature. Longer term I'd like to deprecate passenger. It'd be better to decide then how to best support it.

Copy link
Contributor

@neomilium neomilium Aug 28, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree about nginx, I noted it as example. The idea I want to point is to have a single class variable to select the targeted mode. Internally, we could keep $passenger, $apache and $use_foreman_service.

@ehelms
Copy link
Member

ehelms commented Oct 15, 2018

Just to show you how easy "enabling" puma is (And confirm my theory works about installing the RPM):

[root@centos7-katello-nightly vagrant]# journalctl -xn
-- Logs begin at Mon 2018-10-15 12:34:30 UTC, end at Mon 2018-10-15 12:54:54 UTC. --
Oct 15 12:54:38 centos7-katello-nightly.war.example.com scl[15030]: /opt/theforeman/tfm/root/usr/share/gems/gems/katello-3.9.0/app/models/katello/concerns/subscription_facet_host_extensions.rb:36: warning: previ
Oct 15 12:54:38 centos7-katello-nightly.war.example.com scl[15030]: /opt/theforeman/tfm/root/usr/share/gems/gems/katello-3.9.0/app/models/katello/concerns/subscription_facet_host_extensions.rb:41: warning: alrea
Oct 15 12:54:38 centos7-katello-nightly.war.example.com scl[15030]: /opt/theforeman/tfm/root/usr/share/gems/gems/katello-3.9.0/app/models/katello/concerns/subscription_facet_host_extensions.rb:41: warning: previ
Oct 15 12:54:40 centos7-katello-nightly.war.example.com scl[15030]: /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_docker-4.1.0/app/controllers/api/v2/containers_controller.rb:107: warning: constant ::Fixn
Oct 15 12:54:41 centos7-katello-nightly.war.example.com scl[15030]: => Booting WEBrick
Oct 15 12:54:41 centos7-katello-nightly.war.example.com scl[15030]: => Rails 5.2.1 application starting in production on http://0.0.0.0:3000
Oct 15 12:54:41 centos7-katello-nightly.war.example.com scl[15030]: => Run `rails server -h` for more startup options
Oct 15 12:54:54 centos7-katello-nightly.war.example.com scl[15030]: [2018-10-15 12:54:54] INFO  WEBrick 1.4.2
Oct 15 12:54:54 centos7-katello-nightly.war.example.com scl[15030]: [2018-10-15 12:54:54] INFO  ruby 2.5.0 (2017-12-25) [x86_64-linux]
Oct 15 12:54:54 centos7-katello-nightly.war.example.com scl[15030]: [2018-10-15 12:54:54] INFO  WEBrick::HTTPServer#start: pid=15062 port=3000
[root@centos7-katello-nightly vagrant]# yum -y install tfm-rubygem-puma
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: packages.oit.ncsu.edu
 * epel: download-ib01.fedoraproject.org
 * extras: packages.oit.ncsu.edu
 * updates: packages.oit.ncsu.edu
Resolving Dependencies
--> Running transaction check
---> Package tfm-rubygem-puma.x86_64 0:3.11.4-3.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===================================================================================================================================================================================================================
 Package                                                 Arch                                          Version                                                Repository                                      Size
===================================================================================================================================================================================================================
Installing:
 tfm-rubygem-puma                                        x86_64                                        3.11.4-3.el7                                           foreman                                         79 k

Transaction Summary
===================================================================================================================================================================================================================
Install  1 Package

Total download size: 79 k
Installed size: 231 k
Downloading packages:
tfm-rubygem-puma-3.11.4-3.el7.x86_64.rpm                                                                                                                                                    |  79 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : tfm-rubygem-puma-3.11.4-3.el7.x86_64                                                                                                                                                            1/1 
  Verifying  : tfm-rubygem-puma-3.11.4-3.el7.x86_64                                                                                                                                                            1/1 

Installed:
  tfm-rubygem-puma.x86_64 0:3.11.4-3.el7                                                                                                                                                                           

Complete!
[root@centos7-katello-nightly vagrant]# service foreman restart
Redirecting to /bin/systemctl restart foreman.service
[root@centos7-katello-nightly vagrant]# journalctl -xn
-- Logs begin at Mon 2018-10-15 12:34:30 UTC, end at Mon 2018-10-15 12:55:59 UTC. --
Oct 15 12:55:56 centos7-katello-nightly.war.example.com scl[15030]: /opt/rh/rh-ruby25/root/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:39:in `require'
Oct 15 12:55:56 centos7-katello-nightly.war.example.com scl[15030]: bin/rails:9:in `<main>'
Oct 15 12:55:56 centos7-katello-nightly.war.example.com scl[15030]: [2018-10-15 12:55:56] INFO  going to shutdown ...
Oct 15 12:55:56 centos7-katello-nightly.war.example.com scl[15030]: [2018-10-15 12:55:56] INFO  WEBrick::HTTPServer#start done.
Oct 15 12:55:56 centos7-katello-nightly.war.example.com scl[15030]: Exiting
Oct 15 12:55:56 centos7-katello-nightly.war.example.com systemd[1]: Started Foreman.
-- Subject: Unit foreman.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit foreman.service has finished starting up.
-- 
-- The start-up result is done.
Oct 15 12:55:56 centos7-katello-nightly.war.example.com systemd[1]: Starting Foreman...
-- Subject: Unit foreman.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit foreman.service has begun starting up.
Oct 15 12:55:56 centos7-katello-nightly.war.example.com polkitd[319]: Unregistered Authentication Agent for unix-process:15274:128656 (system bus name :1.67, object path /org/freedesktop/PolicyKit1/Authenticatio
Oct 15 12:55:59 centos7-katello-nightly.war.example.com scl[15295]: /usr/share/foreman/lib/foreman.rb:8: warning: already initialized constant Foreman::UUID_REGEXP
Oct 15 12:55:59 centos7-katello-nightly.war.example.com scl[15295]: /usr/share/foreman/lib/foreman.rb:8: warning: previous definition of UUID_REGEXP was here
[root@centos7-katello-nightly vagrant]# journalctl -xn
-- Logs begin at Mon 2018-10-15 12:34:30 UTC, end at Mon 2018-10-15 12:56:03 UTC. --
Oct 15 12:56:01 centos7-katello-nightly.war.example.com scl[15295]: /opt/theforeman/tfm/root/usr/share/gems/gems/katello-3.9.0/app/models/katello/concerns/subscription_facet_host_extensions.rb:31: warning: alrea
Oct 15 12:56:01 centos7-katello-nightly.war.example.com scl[15295]: /opt/theforeman/tfm/root/usr/share/gems/gems/katello-3.9.0/app/models/katello/concerns/subscription_facet_host_extensions.rb:31: warning: previ
Oct 15 12:56:01 centos7-katello-nightly.war.example.com scl[15295]: /opt/theforeman/tfm/root/usr/share/gems/gems/katello-3.9.0/app/models/katello/concerns/subscription_facet_host_extensions.rb:36: warning: alrea
Oct 15 12:56:01 centos7-katello-nightly.war.example.com scl[15295]: /opt/theforeman/tfm/root/usr/share/gems/gems/katello-3.9.0/app/models/katello/concerns/subscription_facet_host_extensions.rb:36: warning: previ
Oct 15 12:56:01 centos7-katello-nightly.war.example.com scl[15295]: /opt/theforeman/tfm/root/usr/share/gems/gems/katello-3.9.0/app/models/katello/concerns/subscription_facet_host_extensions.rb:41: warning: alrea
Oct 15 12:56:01 centos7-katello-nightly.war.example.com scl[15295]: /opt/theforeman/tfm/root/usr/share/gems/gems/katello-3.9.0/app/models/katello/concerns/subscription_facet_host_extensions.rb:41: warning: previ
Oct 15 12:56:03 centos7-katello-nightly.war.example.com scl[15295]: /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_docker-4.1.0/app/controllers/api/v2/containers_controller.rb:107: warning: constant ::Fixn
Oct 15 12:56:03 centos7-katello-nightly.war.example.com scl[15295]: => Booting Puma
Oct 15 12:56:03 centos7-katello-nightly.war.example.com scl[15295]: => Rails 5.2.1 application starting in production
Oct 15 12:56:03 centos7-katello-nightly.war.example.com scl[15295]: => Run `rails server -h` for more startup options

@ehelms
Copy link
Member

ehelms commented Oct 15, 2018

Not finding a traceback, but I did get an error trying to switch from passenger to service:

[ERROR 2018-10-15T12:54:31 main]  /Stage[main]/Foreman::Service/Service[foreman]/ensure: change from 'stopped' to 'running' failed: Could not enable foreman:

@ekohl
Copy link
Member Author

ekohl commented Oct 15, 2018

I got that too in the acceptance tests and wondered if it was something about the docker container.

use_optional_includes => true,
custom_fragment => $custom_fragment,
* => $passenger_options + $proxy_https_options,
passenger_pre_start => $passenger_https_prestart,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a way to pass these parts optionally? This currently configures the vhost with the Passenger directives if you set passenger false which feels misleading.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It shouldn't. If passenger is false it should be undef. The reason I don't set it in passenger_options is that the pre-start differs for HTTP and HTTPS and didn't want to duplicate more code.

@ehelms
Copy link
Member

ehelms commented Oct 15, 2018

Running the enable on the system:

[root@centos7-katello-nightly vagrant]# systemctl enable foreman
Failed to execute operation: File exists

Googling around seems to have something to do with if the symlink already exists. Perhaps something else is creating it before sytsemctl?

@ekohl
Copy link
Member Author

ekohl commented Oct 15, 2018

Googling around seems to have something to do with if the symlink already exists. Perhaps something else is creating it before sytsemctl?

Perhaps we do it wrong in our systemd unit setup in packaging?

Edit: I noticed we also do some setup with foreman-tasks.service which I thought shouldn't exist, but maybe that's because of its alias.

@ehelms
Copy link
Member

ehelms commented Oct 15, 2018

I noticed this error with --foreman-passenger false:

[ERROR 2018-10-15T15:53:23 main]  Evaluation Error: Error while evaluating a Resource Statement, Unknown resource type: 'foreman::config::passenger::fragment' (file: /usr/share/katello-installer-base/modules/katello/manifests/pulp.pp, line: 88, column: 3) on node centos7-katello-nightly.war.example.com

@ekohl
Copy link
Member Author

ekohl commented Oct 15, 2018

Yes, this is a breaking change and those modules need to be modified. We could keep the defined type with a deprecation to make it easier.

@ehelms
Copy link
Member

ehelms commented Oct 15, 2018

Just keeping track of the issues I run into while testing. Trying to switch from passenger to non-passenger, the Apache proxy seems to be failing:

[root@centos7-foreman-nightly vagrant]# curl https://`hostname` -k
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>503 Service Unavailable</title>
</head><body>
<h1>Service Unavailable</h1>
<p>The server is temporarily unable to service your
request due to maintenance downtime or capacity
problems. Please try again later.</p>
</body></html>

@ekohl
Copy link
Member Author

ekohl commented Oct 18, 2018

What needs to be done is to unset the request headers so they can't be spoofed. Then the application needs to be configured to use HTTP_SSL_* instead of SSL_.

RequestHeader set SSL_CLIENT_S_DN    ""
RequestHeader set SSL_CLIENT_CERT ""
RequestHeader set SSL_CLIENT_VERIFY  ""
<Location />
  RequestHeader set SSL_CLIENT_S_DN "%{SSL_CLIENT_S_DN}s"
  # Broken - needs encoding/decoding of newlines
  #RequestHeader set SSL_CLIENT_CERT "%{SSL_CLIENT_CERT}s"
  RequestHeader set SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"
</Location>

@ehelms
Copy link
Member

ehelms commented Oct 29, 2018

Will need a rebase

@ekohl
Copy link
Member Author

ekohl commented Oct 29, 2018

Did a trivial rebase. Not sure when I'll get back to it, but setting the right headers and configuring Foreman shouldn't be hard to add and then it'll work mostly of out the box.

@ehelms
Copy link
Member

ehelms commented Nov 9, 2018

Adding some additional information here based on conversation. Katello takes in certificates from Apache and processes them here:

https://github.com/Katello/katello/blob/master/app/services/cert/rhsm_client.rb

That code is called from the following and derived from this:

https://github.com/Katello/katello/blob/abbff485b07e94f8dd1dc1caeff4fc23f4e1b356/app/services/katello/authentication/client_authentication.rb#L32

@ehelms
Copy link
Member

ehelms commented Nov 13, 2018

Two additional thoughts from testing:

RequestHeader set SSL_CLIENT_S_DN    ""
RequestHeader set SSL_CLIENT_CERT ""
RequestHeader set SSL_CLIENT_VERIFY  "

I believe this would break one expectation Katello has which is a certificate passing through a reverse proxy on a smart proxy and then to the main server. See the comment from here where we do part of this today -- https://github.com/theforeman/puppet-katello/blob/76496ef444c1b6051b1e41a2596428fc32103f1f/files/katello-apache-ssl.conf#L2-L3

The second part is around how these are controlled. The code seems to make use of a Foreman configuration setting to determine the header which seems odd to me that an admin in the UI can control the infrastructure configuration of the setup, i.e.

app/models/setting/auth.rb:      self.set('ssl_client_cert_env', N_("Environment variable containing a client's SSL certificate"), 'SSL_CLIENT_CERT', N_('SSL client cert env')),

I'll do some digging to see if I can understand why this would ever need to be set this way vs. hard-coded or in settings.yaml.

@ekohl
Copy link
Member Author

ekohl commented Nov 13, 2018

This is a rather thorough rebase where I've tried to split things up into smaller pieces. Still not entirely content but I want to start testing this now and see if it works.

@ekohl ekohl force-pushed the apache-reverse-proxy branch 2 times, most recently from cfaf5df to 1e38143 Compare November 13, 2018 18:17
:ssl_client_dn_env: HTTP_SSL_CLIENT_S_DN
:ssl_client_verify_env: HTTP_SSL_CLIENT_VERIFY
:ssl_client_cert_env: HTTP_SSL_CLIENT_CERT
<% end -%>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Based on our discussions, I thought you were gonna keep this still being set in the Settings (database) vs moving to SETTINGS (app restart). Don't get me wrong I like this change given what these represent, but I'd do this stand alone so we can make the code change for moving them alongside it easier.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At this point I first want to get this working, then I'll see whether we use the config file or database. First I want to get the Apache config right.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right... my point is the application won't respect these because they are SETTINGS and it currently is built to read Settings (database).

I was wondering if for now we'd be best doing:

    foreman_config_entry { 'ssl_client_cert_env':
      value => 'HTTP_SSL_CLIENT_CERt',
    }

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Settings that are in settings.yaml are visible, but can't be overridden:

screen shot 2018-11-14 at 19 33 11

Note it's visible, but there's no edit button. The's also a tooltip:

This setting is defined in the configuration file 'settings.yaml' and is read-only.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Huh, never noticed that before.

@ekohl ekohl force-pushed the apache-reverse-proxy branch 2 times, most recently from b065bd3 to 921c217 Compare November 13, 2018 19:30
@ekohl
Copy link
Member Author

ekohl commented Nov 13, 2018

In its basic form I think this works now.

@ekohl ekohl force-pushed the apache-reverse-proxy branch 2 times, most recently from 7c05062 to 2ce9a8f Compare August 9, 2019 13:19
@@ -52,7 +52,7 @@ previous stable release.
### Foreman version compatibility notes

This module targets Foreman 1.21+. Running without passenger is only supported
on Foreman 1.22+.
on Foreman 1.23+.
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We didn't cherry pick theforeman/foreman-packaging@ab3a75c into 1.22. So for RPMs it's 1.22 but debs 1.23. Rather than cherry picking it for a less used function I'm choosing to just mark it as 1.23.

String $priority = $::foreman::vhost_priority,
Stdlib::Fqdn $servername = $::foreman::servername,
Array[Stdlib::Fqdn] $serveraliases = $::foreman::serveraliases,
Stdlib::Port $server_port = $::foreman::server_port,
Stdlib::Port $server_ssl_port = $::foreman::server_ssl_port,
Stdlib::Httpurl $proxy_backend = "http://${::foreman::foreman_service_bind}:${::foreman::foreman_service_port}/",
Hash $proxy_params = {'retry' => '0'},
Array[String] $proxy_no_proxy_uris = ['/pulp', '/streamer', '/pub'],
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are the ones Katello has. I'm wondering if this is needed or if there's a cleaner solution.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/pub is probably required, /pulp is a wsgi mount, isn't it?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Honestly, I don't know exactly. Some locations are mapped to files. It's a very complicated deployment. This was my "rather safe than sorry" solution.

@ekohl
Copy link
Member Author

ekohl commented Aug 9, 2019

I want to get this merged soon now that we're fresh in the 1.24 development cycle.

@ehelms @timogoebel @evgeni mind having a look?

manifests/install.pp Outdated Show resolved Hide resolved
String $priority = $::foreman::vhost_priority,
Stdlib::Fqdn $servername = $::foreman::servername,
Array[Stdlib::Fqdn] $serveraliases = $::foreman::serveraliases,
Stdlib::Port $server_port = $::foreman::server_port,
Stdlib::Port $server_ssl_port = $::foreman::server_ssl_port,
Stdlib::Httpurl $proxy_backend = "http://${::foreman::foreman_service_bind}:${::foreman::foreman_service_port}/",
Hash $proxy_params = {'retry' => '0'},
Array[String] $proxy_no_proxy_uris = ['/pulp', '/streamer', '/pub'],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/pub is probably required, /pulp is a wsgi mount, isn't it?

path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
if $apache {
if $passenger {
exec {'restart_foreman':
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where is this used?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's used implicitly. It's a refreshonly exec, but when Class['foreman::service'] is refreshed, this exec is refreshed. Note it's been there for ages.

manifests/config/apache.pp Show resolved Hide resolved
@ehelms
Copy link
Member

ehelms commented Aug 27, 2019

Once tests are passing this is a 👍 for me, I'd love to get this in and running for a few weeks in nightly.

@ekohl
Copy link
Member Author

ekohl commented Aug 28, 2019

One thing to consider is that if you can make HTTP requests to the Puma backend, you can imitate anyone. This is a security concern because most things can connect to http://localhost:$port. It could be mitigated by running Puma on a unix socket and limiting access. https://github.com/puma/puma/blob/master/docs/systemd.md#socket-activation describes how we could use this.

Is this something we want to do?

@timogoebel
Copy link
Member

Is this something we want to do?

I would make it the default but allow to change it to some localhost port. The app (e.g. foreman) would then need to verify if the client is actually a trusted host (e.g. that's why we have https://github.com/theforeman/foreman/blob/d74dc4251f8397e31fcb9214d83f929c8992c9c3/app/controllers/concerns/foreman/controller/ip_from_request_env.rb#L12)

@ekohl
Copy link
Member Author

ekohl commented Aug 28, 2019

I'm looking into the socket and while I think it should be possible, I'm going to prefer to harden the setup later and initially launch it as an experimental feature.

I've adapted @neomilium's suggestion and added websockets support now.

@ekohl
Copy link
Member Author

ekohl commented Aug 28, 2019

Current issues:

  • On CentOS 7 the statsd test is failing. This should be unmodified but does run after the service version. I suspect it may still run something in the background and need to investigate
  • On Debian 9 it's failing because it can't find puma. This indicates a packaging issue.

@ekohl
Copy link
Member Author

ekohl commented Aug 28, 2019

On Debian 9 it's failing because it can't find puma. This indicates a packaging issue.

I think theforeman/foreman-packaging#4044 should fix this.

@ekohl
Copy link
Member Author

ekohl commented Aug 29, 2019

Still the issue:

  Notice: /Stage[main]/Foreman::Database/Foreman::Rake[db:migrate]/Exec[foreman-rake-db:migrate]/returns: /usr/lib/ruby/vendor_ruby/bundler/resolver.rb:366:in `block in verify_gemfile_dependencies_are_found!': Could not find gem 'puma' in any of the gem sources listed in your Gemfile or available on this machine. (Bundler::GemNotFound)

Not sure if my change actually made it into nightlies.

@ekohl
Copy link
Member Author

ekohl commented Aug 29, 2019

The issue with statsd is that the Apache config without passenger cleans /etc/httpd/conf.d/passenger.conf which holds PasssengerRoot. This file is not managed on EL7 but is relied on from the mod_passenger package. Removing mod_passenger before the test will work around this but is something users can hit if they switch back and forth.

This unifies the Apache stopping code and also removes mod_passenger on
RH since puppetlabs-apache doesn't deal well with it being installed but
not used. This will be relevant when using the reverse proxy setup.
@ekohl
Copy link
Member Author

ekohl commented Aug 29, 2019

I've cancelled the Debian acceptance tests because they need https://ci.theforeman.org/job/foreman-nightly-deb-pipeline/143/ to complete before they can pass. Other than that I think this PR should turn green.

@ekohl
Copy link
Member Author

ekohl commented Aug 29, 2019

💚 now

@mmoll mmoll merged commit 95f1416 into theforeman:master Aug 30, 2019
@mmoll
Copy link
Contributor

mmoll commented Aug 30, 2019

merged, dank je wel @ekohl!

@ekohl ekohl deleted the apache-reverse-proxy branch February 12, 2020 17:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

7 participants