Conditional ACK. I think it needs a few minor tweaks.
I believe setting the request header X_FORWARDED_PROTO will get you
around the redirection that you mentioned in your comment but please
double check that part.
On 01/19/2011 04:54 PM, Mohammed Morsi wrote:
> ---
> contrib/deltacloud-configure.spec | 1 +
> recipes/apache/manifests/init.pp | 34 +++++++++++++++++
> .../files/aggregator-httpd-ssl.conf | 38
> ++++++++++++++++++++
> .../deltacloud_recipe/files/aggregator-httpd.conf | 23 ++++++++++++
> recipes/deltacloud_recipe/manifests/aggregator.pp | 15 ++++++--
> recipes/deltacloud_recipe/manifests/deltacloud.pp | 1 +
> 6 files changed, 109 insertions(+), 3 deletions(-)
> create mode 100644 recipes/apache/manifests/init.pp
> create mode 100644 recipes/deltacloud_recipe/files/aggregator-httpd-ssl.conf
> create mode 100644 recipes/deltacloud_recipe/files/aggregator-httpd.conf
>
> diff --git a/contrib/deltacloud-configure.spec
> b/contrib/deltacloud-configure.spec
> index e49877f..670d401 100644
> --- a/contrib/deltacloud-configure.spec
> +++ b/contrib/deltacloud-configure.spec
> @@ -33,6 +33,7 @@ rm -rf %{buildroot}
> %{__cp} -R %{pbuild}/recipes/deltacloud_recipe/deltacloud_recipe.pp
> %{buildroot}/%{dchome}
> %{__cp} -R %{pbuild}/recipes/deltacloud_recipe/deltacloud_uninstall.pp
> %{buildroot}/%{dchome}
> %{__cp} -R %{pbuild}/recipes/deltacloud_recipe/*/
> %{buildroot}/%{dchome}/modules/deltacloud_recipe
> +%{__cp} -R %{pbuild}/recipes/apache/ %{buildroot}/%{dchome}/modules/apache
> %{__cp} -R %{pbuild}/recipes/firewall/
> %{buildroot}/%{dchome}/modules/firewall
> %{__cp} -R %{pbuild}/recipes/ntp/ %{buildroot}/%{dchome}/modules/ntp
> %{__cp} -R %{pbuild}/recipes/postgres/
> %{buildroot}/%{dchome}/modules/postgres
> diff --git a/recipes/apache/manifests/init.pp
> b/recipes/apache/manifests/init.pp
> new file mode 100644
> index 0000000..fa8fe53
> --- /dev/null
> +++ b/recipes/apache/manifests/init.pp
> @@ -0,0 +1,34 @@
> +$apache_dir = "/etc/httpd"
> +$apache_conf_dir = "${apache_dir}/conf.d"
> +
> +class apache {
> + # require apache and mod_ssl
> + package { "httpd": ensure => installed }
> +
> + if $enable_security {
> + package { "mod_ssl": ensure => installed }
> + }
> +
> + service { "httpd":
> + ensure => running,
> + require => Package["httpd"],
> + hasrestart => true,
> + hasstatus => true
> + }
> +
> + exec { "reload-apache":
> + command => "/sbin/service httpd reload",
> + refreshonly => true
> + }
> +}
> +
> +define apache::site ( $ensure = 'present', $source = '') {
> + $site_file = "${apache_conf_dir}/${name}.conf"
> + file {
> + $site_file:
> + ensure => $ensure,
> + source => $source,
> + notify => Exec["reload-apache"],
> + require => Service['httpd']
> + }
> +}
> diff --git a/recipes/deltacloud_recipe/files/aggregator-httpd-ssl.conf
> b/recipes/deltacloud_recipe/files/aggregator-httpd-ssl.conf
> new file mode 100644
> index 0000000..122952f
> --- /dev/null
> +++ b/recipes/deltacloud_recipe/files/aggregator-httpd-ssl.conf
> @@ -0,0 +1,38 @@
> +NameVirtualHost *:443
> +<VirtualHost *:443>
> +
> + ErrorLog /etc/httpd/logs/error_log
> + TransferLog /etc/httpd/logs/access_log
> + LogLevel debug
> +
> + ProxyRequests Off
> + SSLEngine On
> + SSLCertificateFile /etc/pki/tls/certs/localhost.crt
> + SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
RequestHeader set X_FORWARDED_PROTO 'https'
> + ProxyPreserveHost Off
> +
> +Alias /deltacloud/stylesheets "/usr/share/deltacloud-aggregator/public/"
> +Alias /deltacloud/images "/usr/share/deltacloud-aggregator/public/"
> +Alias /deltacloud/errors "/usr/share/deltacloud-aggregator/public/"
> +
Alias /deltacloud/stylesheets
"/usr/share/deltacloud-aggregator/public/stylesheets"
Alias /deltacloud/images "/usr/share/deltacloud-aggregator/public/images"
Alias /deltacloud/errors "/usr/share/deltacloud-aggregator/public/errors"
Alias /deltacloud/javascripts
"/usr/share/deltacloud-aggregator/public/javascripts"
Alias /fonts "/usr/share/deltacloud-aggregator/public/fonts"
> +# TODO Apache will set HTTP_X_FORWARDED_HOST here to the hostname minus the
> port.
> +# Rails (actioncontroller) will take this and use it for the hostname for
> redirects.
> +# Since we define the http->https rewrite below this isn't an issue but
> +# should probably be resolved at some point
> +ProxyPass /deltacloud/images !
> +ProxyPass /deltacloud/stylesheets !
> +ProxyPass /deltacloud/errors !
> +ProxyPass /deltacloud http://localhost:3000/deltacloud
> +ProxyPassReverse /deltacloud http://localhost:3000/deltacloud
> +ProxyPassReverse /deltacloud/images !
> +ProxyPassReverse /deltacloud/stylesheets !
> +ProxyPassReverse /deltacloud/errors !
> +
> +</VirtualHost>
> +
> +NameVirtualHost *:80
> +<VirtualHost *:80>
> + RewriteEngine On
> + RewriteCond %{HTTPS} off
> + RewriteRule /deltacloud(.*) https://%{HTTP_HOST}%{REQUEST_URI}
> +</VirtualHost>
> diff --git a/recipes/deltacloud_recipe/files/aggregator-httpd.conf
> b/recipes/deltacloud_recipe/files/aggregator-httpd.conf
> new file mode 100644
> index 0000000..6ef80b8
> --- /dev/null
> +++ b/recipes/deltacloud_recipe/files/aggregator-httpd.conf
> @@ -0,0 +1,23 @@
> +NameVirtualHost *:80
> +<VirtualHost *:80>
> +
> + ErrorLog /etc/httpd/logs/error_log
> + TransferLog /etc/httpd/logs/access_log
> + LogLevel warn
> +
> + ProxyRequests Off
> +
> +Alias /deltacloud/stylesheets
> "/usr/share/deltacloud-aggregator/public/stylesheets"
> +Alias /deltacloud/images "/usr/share/deltacloud-aggregator/public/images"
> +Alias /deltacloud/errors "/usr/share/deltacloud-aggregator/public/"
> +
Alias /deltacloud/stylesheets
"/usr/share/deltacloud-aggregator/public/stylesheets"
Alias /deltacloud/images "/usr/share/deltacloud-aggregator/public/images"
Alias /deltacloud/errors "/usr/share/deltacloud-aggregator/public/errors"
Alias /deltacloud/javascripts
"/usr/share/deltacloud-aggregator/public/javascripts"
Alias /fonts "/usr/share/deltacloud-aggregator/public/fonts"
> +ProxyPass /deltacloud/images !
> +ProxyPass /deltacloud/stylesheets !
> +ProxyPass /deltacloud/errors !
> +ProxyPass /deltacloud http://localhost:3000/deltacloud
> +ProxyPassReverse /deltacloud http://localhost:3000/deltacloud
> +ProxyPassReverse /deltacloud/images !
> +ProxyPassReverse /deltacloud/stylesheets !
> +ProxyPassReverse /deltacloud/errors !
> +
> +</VirtualHost>
> diff --git a/recipes/deltacloud_recipe/manifests/aggregator.pp
> b/recipes/deltacloud_recipe/manifests/aggregator.pp
> index 2be247c..0c0c2e2 100644
> --- a/recipes/deltacloud_recipe/manifests/aggregator.pp
> +++ b/recipes/deltacloud_recipe/manifests/aggregator.pp
> @@ -18,13 +18,14 @@ class deltacloud::aggregator inherits deltacloud {
> selinux::mode{"permissive":}
>
> ### Setup firewall for deltacloud
> - firewall::rule{"http": destination_port => '80'}
> + firewall::rule{"http": destination_port => '80' }
> + firewall::rule{"https": destination_port => '443'}
>
> ### Start the deltacloud services
> file {"/var/lib/condor/condor_config.local":
> source =>
> "puppet:///modules/deltacloud_recipe/condor_config.local",
> require => Package['deltacloud-aggregator-daemons'] }
> - service { ['condor', 'httpd']:
> + service { 'condor':
> ensure => 'running',
> enable => true,
> require => File['/var/lib/condor/condor_config.local'] }
> @@ -60,6 +61,14 @@ class deltacloud::aggregator inherits deltacloud {
> cwd => "/usr/share/deltacloud-aggregator",
> rails_env => "production",
> require =>
> Rails::Create::Db[create_deltacloud_database]}
> +
> + ### Setup apache for deltacloud
> + include apache
> + if $enable_security {
> + apache::site{"aggregator": source =>
> 'puppet:///modules/deltacloud_recipe/aggregator-httpd-ssl.conf'}
#This takes over the /etc/httpd/conf.d/deltacloud-aggregator.conf from
#deltacloud-aggregator-daemons.rpm
#Do we need it in deltacloud-aggregator-daemons.rpm anymore?
apache::site{"deltacloud-aggregator": source =>
'puppet:///modules/deltacloud_recipe/aggregator-httpd-ssl.conf'}
> + } else{
> + apache::site{"aggregator": source =>
> 'puppet:///modules/deltacloud_recipe/aggregator-httpd.conf'}
> + apache::site{"deltacloud-aggregator": source =>
'puppet:///modules/deltacloud_recipe/aggregator-httpd.conf'}
> + }
Works for now. It might be worth playing around with the use of
templates instead of files to see if we can avoid the conditionals in
the .pp.
> }
>
> class deltacloud::aggregator::disabled {
> @@ -84,7 +93,7 @@ class deltacloud::aggregator::disabled {
> require => Package['deltacloud-aggregator']}
>
> ### Stop the deltacloud services
> - service { ['condor', 'httpd']:
> + service { 'condor':
> ensure => 'stopped',
> enable => false,
> require => Service['deltacloud-aggregator',
> diff --git a/recipes/deltacloud_recipe/manifests/deltacloud.pp
> b/recipes/deltacloud_recipe/manifests/deltacloud.pp
> index eef014f..c7693c1 100644
> --- a/recipes/deltacloud_recipe/manifests/deltacloud.pp
> +++ b/recipes/deltacloud_recipe/manifests/deltacloud.pp
> @@ -3,6 +3,7 @@
> import "firewall"
>
> import "postgres"
> +import "apache"
> import "rails"
> import "selinux"
> import "ntp"
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel