You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by de...@apache.org on 2017/04/06 20:04:48 UTC
[4/6] incubator-trafficcontrol git commit: changes scope for
remap.config
changes scope for remap.config
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/8e9d8c76
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/8e9d8c76
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/8e9d8c76
Branch: refs/heads/master
Commit: 8e9d8c76f59e32e76e78c421b112db5ec5b4fb2a
Parents: 1c0e4ff
Author: Derek Gelinas <de...@cable.comcast.com>
Authored: Thu Apr 6 16:58:08 2017 +0000
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 13:20:12 2017 -0600
----------------------------------------------------------------------
.../app/lib/API/Configs/ApacheTrafficServer.pm | 322 +++++++++++++++++--
1 file changed, 289 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8e9d8c76/traffic_ops/app/lib/API/Configs/ApacheTrafficServer.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/API/Configs/ApacheTrafficServer.pm b/traffic_ops/app/lib/API/Configs/ApacheTrafficServer.pm
index 1a0956e..ed36d0c 100644
--- a/traffic_ops/app/lib/API/Configs/ApacheTrafficServer.pm
+++ b/traffic_ops/app/lib/API/Configs/ApacheTrafficServer.pm
@@ -64,23 +64,24 @@ sub get_config_metadata {
my %condition = ( 'me.host_name' => $host_name );
my $rs_server = $self->db->resultset('Server')->search( \%condition, { prefetch => [ 'cdn', 'profile' ] } );
my $tm_url = $self->db->resultset('Parameter')->search( { -and => [ name => 'tm.url', config_file => 'global' ] } )->get_column('value')->first();
- my $tm_cache_url = $self->db->resultset('Parameter')->search( { -and => [ name => 'tm_cache.url', config_file => 'global' ] } )->get_column('value')->first();
+ my $tm_rev_proxy_url = $self->db->resultset('Parameter')->search( { -and => [ name => 'tm_rev_proxy.url', config_file => 'global' ] } )->get_column('value')->first();
my $cdn_name = $server_obj->cdn->name;
my $server = $rs_server->next;
my $config_file_obj;
my @config_files;
if ($server) {
- $data_obj->{'info'}->{'server_name'} = $server_obj->host_name;
- $data_obj->{'info'}->{'server_ipv4'} = $server_obj->ip_address;
- $data_obj->{'info'}->{'server_id'} = $server_obj->id;
- $data_obj->{'info'}->{'profile_name'} = $server->profile->name;
- $data_obj->{'info'}->{'profile_id'} = $server->profile->id;
- $data_obj->{'info'}->{'cdn_name'} = $cdn_name;
- $data_obj->{'info'}->{'cdn_id'} = $server->cdn->id;
- $data_obj->{'info'}->{'to_url'} = $tm_url;
- if ( $tm_cache_url ) {
- $data_obj->{'info'}->{'to_cache_url'} = $tm_cache_url;
+ $data_obj->{'info'}->{'serverName'} = $server_obj->host_name;
+ $data_obj->{'info'}->{'serverIpv4'} = $server_obj->ip_address;
+ $data_obj->{'info'}->{'serverId'} = $server_obj->id;
+ $data_obj->{'info'}->{'profileName'} = $server->profile->name;
+ $data_obj->{'info'}->{'profileId'} = $server->profile->id;
+ $data_obj->{'info'}->{'cdnName'} = $cdn_name;
+ $data_obj->{'info'}->{'cdnId'} = $server->cdn->id;
+ $data_obj->{'info'}->{'toUrl'} = $tm_url;
+ $data_obj->{'info'}->{'serverTcpPort'} = $server_obj->tcp_port;
+ if ( $tm_rev_proxy_url ) {
+ $data_obj->{'info'}->{'toRevProxyUrl'} = $tm_rev_proxy_url;
}
#$data_obj->{'profile'}->{'name'} = $server->profile->name;
@@ -115,7 +116,7 @@ sub get_config_metadata {
else {
$scope_id = $server_obj->host_name;
}
- $config_file_obj->{$config_file}->{'API_URI'} = "/api/1.2/" . $scope . "/" . $scope_id . "/configfiles/ats/" . $config_file;
+ $config_file_obj->{$config_file}->{'apiUri'} = "/api/1.2/" . $scope . "/" . $scope_id . "/configfiles/ats/" . $config_file;
$config_file_obj->{$config_file}->{'scope'} = $scope;
}
@@ -123,7 +124,7 @@ sub get_config_metadata {
push ( @config_files, $config_file_obj->{$config_file} );
}
- $data_obj->{'config_files'} = \@config_files;
+ $data_obj->{'configFiles'} = \@config_files;
my $file_contents = encode_json($data_obj);
return $self->render( text => $file_contents, format => 'txt' );
@@ -157,7 +158,6 @@ sub get_server_config {
if ( $filename =~ /to_ext_.*\.config/ ) { $file_contents = $self->to_ext_dot_config( $server_obj, $filename ); }
elsif ( $filename eq "ip_allow.config" ) { $file_contents = $self->ip_allow_dot_config( $server_obj, $filename ); }
elsif ( $filename eq "parent.config" ) { $file_contents = $self->parent_dot_config( $server_obj, $filename ); }
- elsif ( $filename eq "remap.config" ) { $file_contents = $self->remap_dot_config( $server_obj, $filename ); }
elsif ( $filename eq "hosting.config" ) { $file_contents = $self->hosting_dot_config( $server_obj, $filename ); }
elsif ( $filename eq "cache.config" ) { $file_contents = $self->cache_dot_config( $server_obj, $filename ); }
elsif ( $filename eq "packages" ) {
@@ -258,6 +258,7 @@ sub get_profile_config {
elsif ( $filename eq "logs_xml.config" ) { $file_contents = $self->logs_xml_dot_config( $profile_obj, $filename ); }
elsif ( $filename eq "plugin.config" ) { $file_contents = $self->generic_profile_config( $profile_obj, $filename ); }
elsif ( $filename eq "records.config" ) { $file_contents = $self->generic_profile_config( $profile_obj, $filename ); }
+ elsif ( $filename eq "remap.config" ) { $file_contents = $self->remap_dot_config( $profile_obj, $filename ); }
elsif ( $filename eq "storage.config" ) { $file_contents = $self->storage_dot_config( $profile_obj, $filename ); }
elsif ( $filename eq "sysctl.conf" ) { $file_contents = $self->generic_profile_config( $profile_obj, $filename ); }
elsif ( $filename =~ /url_sig_.*\.config/ ) { $file_contents = $self->url_sig_dot_config( $profile_obj, $filename ); }
@@ -294,8 +295,6 @@ sub get_scope {
if ( $fname eq "ip_allow.config" ) { $scope = 'server' }
elsif ( $fname eq "parent.config" ) { $scope = 'server' }
- elsif ( $fname eq "records.config" ) { $scope = 'profile' }
- elsif ( $fname eq "remap.config" ) { $scope = 'server' }
elsif ( $fname =~ /to_ext_.*\.config/ ) { $scope = 'server' }
elsif ( $fname eq "hosting.config" ) { $scope = 'server' }
elsif ( $fname eq "cache.config" ) { $scope = 'server' }
@@ -307,6 +306,8 @@ sub get_scope {
elsif ( $fname eq "drop_qstring.config" ) { $scope = 'profile' }
elsif ( $fname eq "logs_xml.config" ) { $scope = 'profile' }
elsif ( $fname eq "plugin.config" ) { $scope = 'profile' }
+ elsif ( $fname eq "records.config" ) { $scope = 'profile' }
+ elsif ( $fname eq "remap.config" ) { $scope = 'profile' }
elsif ( $fname eq "storage.config" ) { $scope = 'profile' }
elsif ( $fname eq "sysctl.conf" ) { $scope = 'profile' }
elsif ( $fname =~ /url_sig_.*\.config/ ) { $scope = 'profile' }
@@ -459,6 +460,261 @@ sub profile_param_value {
return ( defined $param ? $param->parameter->value : $default );
}
+sub delivery_service_data_by_profile {
+ my $self = shift;
+ my $profile_id = shift;
+ my @data;
+
+ my $dbh = $self->db->storage->dbh;
+ my $qry = 'select
+ deliveryservice.id,
+ deliveryservice.xml_id,
+ deliveryservice.dscp,
+ deliveryservice.signed,
+ deliveryservice.qstring_ignore,
+ deliveryservice.org_server_fqdn,
+ deliveryservice.origin_shield,
+ regex.pattern AS pattern,
+ retype.name AS re_type,
+ dstype.name AS ds_type,
+ cdn.domain_name AS domain_name,
+ deliveryservice.profile,
+ deliveryservice.protocol,
+ deliveryservice.ssl_key_version,
+ deliveryservice.range_request_handling,
+ deliveryservice.edge_header_rewrite,
+ deliveryservice.mid_header_rewrite,
+ deliveryservice.regex_remap,
+ deliveryservice.cacheurl,
+ deliveryservice.remap_text,
+ deliveryservice.multi_site_origin,
+ deliveryservice.multi_site_origin_algorithm
+ from deliveryservice
+ JOIN deliveryservice_regex ON deliveryservice_regex.deliveryservice = deliveryservice.id
+ JOIN regex ON deliveryservice_regex.regex = regex.id
+ JOIN type as retype ON regex.type = retype.id
+ JOIN type as dstype ON deliveryservice.type = dstype.id
+ JOIN cdn ON cdn.id = deliveryservice.cdn_id
+ where deliveryservice.id = ANY (
+ select DISTINCT
+ deliveryservice
+ from deliveryservice_server
+ where server = ANY (
+ select
+ id
+ from server
+ where profile = '.$profile_id.'
+ )
+ );
+ ';
+
+ my $stmt = $dbh->prepare($qry);
+ $stmt->execute();
+
+ my $deliveryservice_id;
+ my $deliveryservice_xml_id;
+ my $deliveryservice_dscp;
+ my $deliveryservice_signed;
+ my $deliveryservice_qstring_ignore;
+ my $deliveryservice_org_server_fqdn;
+ my $deliveryservice_origin_shield;
+ my $pattern;
+ my $re_type;
+ my $ds_type;
+ my $domain_name;
+ my $deliveryservice_profile;
+ my $deliveryservice_protocol;
+ my $deliveryservice_ssl_key_version;
+ my $deliveryservice_range_request_handling;
+ my $deliveryservice_edge_header_rewrite;
+ my $deliveryservice_mid_header_rewrite;
+ my $deliveryservice_regex_remap;
+ my $deliveryservice_cacheurl;
+ my $deliveryservice_remap_text;
+ my $deliveryservice_multi_site_origin;
+ my $deliveryservice_multi_site_origin_algorithm;
+
+ $stmt->bind_columns(
+ \$deliveryservice_id,
+ \$deliveryservice_xml_id,
+ \$deliveryservice_dscp,
+ \$deliveryservice_signed,
+ \$deliveryservice_qstring_ignore,
+ \$deliveryservice_org_server_fqdn,
+ \$deliveryservice_origin_shield,
+ \$pattern,
+ \$re_type,
+ \$ds_type,
+ \$domain_name,
+ \$deliveryservice_profile,
+ \$deliveryservice_protocol,
+ \$deliveryservice_ssl_key_version,
+ \$deliveryservice_range_request_handling,
+ \$deliveryservice_edge_header_rewrite,
+ \$deliveryservice_mid_header_rewrite,
+ \$deliveryservice_regex_remap,
+ \$deliveryservice_cacheurl,
+ \$deliveryservice_remap_text,
+ \$deliveryservice_multi_site_origin,
+ \$deliveryservice_multi_site_origin_algorithm
+ );
+
+ while ( my $row = $stmt->fetch() ) {
+ push(
+ @data, {
+ "id" => $deliveryservice_id,
+ "xml_id" => $deliveryservice_xml_id,
+ "dscp" => $deliveryservice_dscp,
+ "signed" => $deliveryservice_signed,
+ "qstring_ignore" => $deliveryservice_qstring_ignore,
+ "org_server_fqdn" => $deliveryservice_org_server_fqdn,
+ "origin_shield" => $deliveryservice_origin_shield,
+ "pattern" => $pattern,
+ "re_type" => $re_type,
+ "ds_type" => $ds_type,
+ "domain_name" => $domain_name,
+ "profile" => $deliveryservice_profile,
+ "protocol" => $deliveryservice_protocol,
+ "ssl_key_version" => $deliveryservice_ssl_key_version,
+ "range_request_handling" => $deliveryservice_range_request_handling,
+ "edge_header_rewrite" => $deliveryservice_edge_header_rewrite,
+ "mid_header_rewrite" => $deliveryservice_mid_header_rewrite,
+ "regex_remap" => $deliveryservice_regex_remap,
+ "cacheurl" => $deliveryservice_cacheurl,
+ "remap_text" => $deliveryservice_remap_text,
+ "multi_site_origin" => $deliveryservice_multi_site_origin,
+ "multi_site_origin_algorithm" => $deliveryservice_multi_site_origin_algorithm
+ }
+ );
+ }
+
+ return @data;
+}
+
+#gets the delivery service data for all servers assigned to a profile.
+sub profile_ds_data {
+ my $self = shift;
+ my $profile_obj = shift;
+ my $dsinfo;
+
+ my @rs = $self->delivery_service_data_by_profile( $profile_obj->id );
+
+ my $j = 0;
+ while ( scalar(@rs) !=0 ) {
+ my $row = shift(@rs);
+
+ my $org_server = $row->{'org_server_fqdn'};
+ my $dscp = $row->{'dscp'};
+ my $re_type = $row->{'re_type'};
+ my $ds_type = $row->{'ds_type'};
+ my $signed = $row->{'signed'};
+ my $qstring_ignore = $row->{'qstring_ignore'};
+ my $ds_xml_id = $row->{'xml_id'};
+ my $ds_domain = $row->{'domain_name'};
+ my $edge_header_rewrite = $row->{'edge_header_rewrite'};
+ my $mid_header_rewrite = $row->{'mid_header_rewrite'};
+ my $regex_remap = $row->{'regex_remap'};
+ my $protocol = $row->{'protocol'};
+ my $range_request_handling = $row->{'range_request_handling'};
+ my $origin_shield = $row->{'origin_shield'};
+ my $cacheurl = $row->{'cacheurl'};
+ my $remap_text = $row->{'remap_text'};
+ my $multi_site_origin = $row->{'multi_site_origin'};
+
+ if ( $re_type eq 'HOST_REGEXP' ) {
+ my $host_re = $row->{'pattern'};
+ #my $map_to = $org_server . "/";
+ my $map_to;
+ if ( defined($org_server) ) {
+ $map_to = $org_server . "/";
+ }
+ if ( $host_re =~ /\.\*$/ ) {
+ my $re = $host_re;
+ $re =~ s/\\//g;
+ $re =~ s/\.\*//g;
+ my $hname = $ds_type =~ /^DNS/ ? "edge" : "ccr";
+ my $portstr = ":" . "__SERVER_TCP_PORT__";
+ my $map_from = "http://" . $hname . $re . $ds_domain . $portstr . "/";
+ if ( $protocol == HTTP ) {
+ $dsinfo->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
+ }
+ elsif ( $protocol == HTTPS || $protocol == HTTP_TO_HTTPS ) {
+ $map_from = "https://" . $hname . $re . $ds_domain . "/";
+ $dsinfo->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
+ }
+ elsif ( $protocol == HTTP_AND_HTTPS ) {
+
+ #add the first one with http
+ $dsinfo->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
+
+ #add the second one for https
+ my $map_from2 = "https://" . $hname . $re . $ds_domain . "/";
+ $dsinfo->{dslist}->[$j]->{"remap_line2"}->{$map_from2} = $map_to;
+ }
+ }
+ else {
+ my $map_from = "http://" . $host_re . "/";
+ if ( $protocol == HTTP ) {
+ $dsinfo->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
+ }
+ elsif ( $protocol == HTTPS || $protocol == HTTP_TO_HTTPS ) {
+ $map_from = "https://" . $host_re . "/";
+ $dsinfo->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
+ }
+ elsif ( $protocol == HTTP_AND_HTTPS ) {
+
+ #add the first with http
+ $dsinfo->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
+
+ #add the second with https
+ my $map_from2 = "https://" . $host_re . "/";
+ $dsinfo->{dslist}->[$j]->{"remap_line2"}->{$map_from2} = $map_to;
+ }
+ }
+ }
+
+ $dsinfo->{dslist}->[$j]->{"dscp"} = $dscp;
+ $dsinfo->{dslist}->[$j]->{"org"} = $org_server;
+ $dsinfo->{dslist}->[$j]->{"type"} = $ds_type;
+ $dsinfo->{dslist}->[$j]->{"domain"} = $ds_domain;
+ $dsinfo->{dslist}->[$j]->{"signed"} = $signed;
+ $dsinfo->{dslist}->[$j]->{"qstring_ignore"} = $qstring_ignore;
+ $dsinfo->{dslist}->[$j]->{"ds_xml_id"} = $ds_xml_id;
+ $dsinfo->{dslist}->[$j]->{"edge_header_rewrite"} = $edge_header_rewrite;
+ $dsinfo->{dslist}->[$j]->{"mid_header_rewrite"} = $mid_header_rewrite;
+ $dsinfo->{dslist}->[$j]->{"regex_remap"} = $regex_remap;
+ $dsinfo->{dslist}->[$j]->{"range_request_handling"} = $range_request_handling;
+ $dsinfo->{dslist}->[$j]->{"origin_shield"} = $origin_shield;
+ $dsinfo->{dslist}->[$j]->{"cacheurl"} = $cacheurl;
+ $dsinfo->{dslist}->[$j]->{"remap_text"} = $remap_text;
+ $dsinfo->{dslist}->[$j]->{"multi_site_origin"} = $multi_site_origin;
+
+ if ( defined($edge_header_rewrite) ) {
+ my $fname = "hdr_rw_" . $ds_xml_id . ".config";
+ $dsinfo->{dslist}->[$j]->{"hdr_rw_file"} = $fname;
+ }
+ if ( defined($mid_header_rewrite) ) {
+ my $fname = "hdr_rw_mid_" . $ds_xml_id . ".config";
+ $dsinfo->{dslist}->[$j]->{"mid_hdr_rw_file"} = $fname;
+ }
+ if ( defined($cacheurl) ) {
+ my $fname = "cacheurl_" . $ds_xml_id . ".config";
+ $dsinfo->{dslist}->[$j]->{"cacheurl_file"} = $fname;
+ }
+ if ( defined( $row->{'profile'} ) ) {
+ my $dsparamrs = $self->db->resultset('ProfileParameter')->search( { profile => $row->{'profile'} }, { prefetch => [ 'profile', 'parameter' ] } );
+ while ( my $prow = $dsparamrs->next ) {
+ $dsinfo->{dslist}->[$j]->{'param'}->{ $prow->parameter->config_file }->{ $prow->parameter->name } = $prow->parameter->value;
+ }
+ }
+
+ $j++;
+ }
+
+ # $self->app->session->{dsinfo} = $dsinfo;
+ return $dsinfo;
+}
+
#gets the delivery service data for an entire CDN.
sub cdn_ds_data {
my $self = shift;
@@ -1809,16 +2065,16 @@ sub parent_dot_config {
sub remap_dot_config {
my $self = shift;
- my $server_obj = shift;
+ my $profile_obj = shift;
my $data;
- my $pdata = $self->param_data( $server_obj, 'package' );
- my $text = $self->header_comment( $server_obj->host_name );
+ my $pdata = $self->profile_param_data( $profile_obj->id, 'package' );
+ my $text = $self->header_comment( $profile_obj->name );
if ( !defined($data) ) {
- $data = $self->ds_data($server_obj);
+ $data = $self->profile_ds_data($profile_obj);
}
- if ( $server_obj->type->name =~ m/^MID/ ) {
+ if ( $profile_obj->name =~ m/^MID/ ) {
my %mid_remap;
foreach my $ds ( @{ $data->{dslist} } ) {
if ( $ds->{type} =~ /LIVE/ && $ds->{type} !~ /NATNL/ ) {
@@ -1852,25 +2108,25 @@ sub remap_dot_config {
foreach my $ds ( @{ $data->{dslist} } ) {
foreach my $map_from ( keys %{ $ds->{remap_line} } ) {
my $map_to = $ds->{remap_line}->{$map_from};
- $text = $self->build_remap_line( $server_obj, $pdata, $text, $data, $ds, $map_from, $map_to );
+ $text = $self->build_remap_line( $profile_obj, $pdata, $text, $data, $ds, $map_from, $map_to );
}
foreach my $map_from ( keys %{ $ds->{remap_line2} } ) {
my $map_to = $ds->{remap_line2}->{$map_from};
- $text = $self->build_remap_line( $server_obj, $pdata, $text, $data, $ds, $map_from, $map_to );
+ $text = $self->build_remap_line( $profile_obj, $pdata, $text, $data, $ds, $map_from, $map_to );
}
}
return $text;
}
sub build_remap_line {
- my $self = shift;
- my $server_obj = shift;
- my $pdata = shift;
- my $text = shift;
- my $data = shift;
- my $remap = shift;
- my $map_from = shift;
- my $map_to = shift;
+ my $self = shift;
+ my $profile_obj = shift;
+ my $pdata = shift;
+ my $text = shift;
+ my $data = shift;
+ my $remap = shift;
+ my $map_from = shift;
+ my $map_to = shift;
if ( $remap->{type} eq 'ANY_MAP' ) {
$text .= $remap->{remap_text} . "\n";
@@ -1880,7 +2136,7 @@ sub build_remap_line {
my $host_name = $data->{host_name};
my $dscp = $remap->{dscp};
- $map_from =~ s/ccr/$host_name/;
+ $map_from =~ s/ccr/__HOSTNAME__/;
if ( defined( $pdata->{'dscp_remap'} ) ) {
$text .= "map " . $map_from . " " . $map_to . " \@plugin=dscp_remap.so \@pparam=" . $dscp;
@@ -1899,7 +2155,7 @@ sub build_remap_line {
$text .= " \@plugin=regex_remap.so \@pparam=" . $dqs_file;
}
elsif ( $remap->{qstring_ignore} == 1 ) {
- my $global_exists = $self->profile_param_value( $server_obj->profile->id, 'cacheurl.config', 'location', undef );
+ my $global_exists = $self->profile_param_value( $profile_obj->id, 'cacheurl.config', 'location', undef );
if ($global_exists) {
$self->app->log->debug(
"qstring_ignore == 1, but global cacheurl.config param exists, so skipping remap rename config_file=cacheurl.config parameter if you want to change"