Ixchel

 view release on metacpan or  search on metacpan

lib/Ixchel/Actions/xeno_build.pm  view on Meta::CPAN

						);
						return $self;
					}
				} ## end foreach my $fetch_value ( 'url', 'dst' )

				$self->status_add( type => $type, status => 'Fetching ' . $fetch_name );
				my $url = $self->{opts}{xeno_build}{$type}{items}{$fetch_name}{url};
				my $dst = $self->{opts}{xeno_build}{$type}{items}{$fetch_name}{dst};
				$self->status_add( type => $type, status => 'Fetch "' . $fetch_name . '" URL: ' . $url );
				$self->status_add( type => $type, status => 'Fetch "' . $fetch_name . '" DST: ' . $dst );
				$self->status_add(
					type   => $type,
					status => 'Fetch "' . $fetch_name . '" Template: ' . $template_it
				);
				if ($template_it) {
					# template the url
					my $output = '';
					eval {
						$self->{t}->process( \$url, $self->{template_vars}, \$output ) || die $self->{t}->error;
						$url = $output;
					};
					if ($@) {
						$self->status_add(
							type   => $type,
							status => 'Templating failed for "' . $fetch_name . ' for the URL"... ' . $@,
							error  => 1,
						);
						return $self->{results};
					}
					$self->{opts}{xeno_build}{$type}{items}{url} = $url;

					# template the dst
					$output = '';
					eval {
						$self->{t}->process( \$dst, $self->{template_vars}, \$output ) || die $self->{t}->error;
						$dst = $output;
					};
					if ($@) {
						$self->status_add(
							type   => $type,
							status => 'Templating failed for "' . $fetch_name . ' for the URL"... ' . $@,
							error  => 1,
						);
						return $self->{results};
					}
					$self->{opts}{xeno_build}{$type}{items}{dst} = $dst;
					$self->status_add(
						type   => $type,
						status => 'Fetch "' . $fetch_name . '" URL Template Results: ' . $url
					);
					$self->status_add(
						type   => $type,
						status => 'Fetch "' . $fetch_name . '" DST Template Results: ' . $dst
					);
				} ## end if ($template_it)

				my $return_code  = 'undef';
				my $return_extra = '';
				eval {
					my $ua = LWP::UserAgent->new( timeout => 10 );
					if ( defined( $ENV{HTTP_PROXY} ) ) {
						$ua->proxy( ['http'], $ENV{HTTP_PROXY} );
					}
					if ( defined( $ENV{HTTPS_PROXY} ) ) {
						$ua->proxy( ['https'], $ENV{HTTPS_PROXY} );
					}
					if ( defined( $ENV{FTP_PROXY} ) ) {
						$ua->proxy( ['ftp'], $ENV{FTP_PROXY} );
					}

					my $response = $ua->get($url);

					$return_code = $response->status_line;

					my $content;
					if ( $response->is_success ) {
						$content = $response->decoded_content;
					} else {
						die( $response->status_line );
					}

					write_file( $dst, $content );
				};
				my $fetch_errored = 0;
				if ($@) {
					$return_extra  = '   ...   ' . $@;
					$fetch_errored = 1;
				}
				$self->status_add(
					type   => $type,
					error  => $fetch_errored,
					status => 'Fetch "' . $fetch_name . '" Return Code: ' . $return_code . $return_extra
				);
			} ## end foreach my $fetch_name (@fetch_names)

			# save the fetched items as a template var for possible later usage
			$self->{template_vars}{ $type . '_items' } = $self->{opts}{xeno_build}{$type}{items};
		} elsif ( $type =~ /^pkgs[0-9]*$/ && $for_this_system ) {
			##
			##
			##
			## start of pkgs
			##
			##
			##

			# handle pkgs.absent
			if ( defined( $self->{opts}{xeno_build}{$type}{absent}{ $self->{os} }[0] ) ) {
				foreach my $pkg ( @{ $self->{opts}{xeno_build}{$type}{absent}{ $self->{os} } } ) {
					eval { pkg( $pkg, ensure => 'absent' ); };
					if ($@) {
						$self->status_add(
							type   => $type,
							status => 'Failed uninstalling ' . $pkg . ' for ' . $self->{os},
							error  => 1,
						);
						return $self->{results};
					}
				} ## end foreach my $pkg ( @{ $self->{opts}{xeno_build}{...}})
			} ## end if ( defined( $self->{opts}{xeno_build}{$type...}))

			# handle .pkgs.present



( run in 3.072 seconds using v1.01-cache-2.11-cpan-2e0ccfb7a10 )