Puppet Plan: peadm::util::retrieve_and_upload

Defined in:
plans/util/retrieve_and_upload.pp

Overview

Parameters:

  • nodes (TargetSpec)
  • source (String[1])
  • local_path (String[1])
  • upload_path (String[1])


2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'plans/util/retrieve_and_upload.pp', line 2

plan peadm::util::retrieve_and_upload(
  TargetSpec $nodes,
  String[1]  $source,
  String[1]  $local_path,
  String[1]  $upload_path,
) {
  # lint:ignore:strict_indent
  $nodes.peadm::fail_on_transport('pcp', @(HEREDOC/n))
    \nThe "pcp" transport is not available for uploading PE installers as
    the ".tar.gz" file is too large to send over the PE Orchestrator
    as an argument to the "bolt_shim::upload" task.

    To upgrade PE XL database nodes via PCP, use "download_mode = direct".
    If Puppet download servers are not reachable over the internet,
    upload the ".tar.gz" to an internal fileserver and use the
    "pe_installer_source" parameter to retrieve it.

    For information on configuring plan parameters, see:

        https://forge.puppet.com/modules/puppetlabs/peadm/plans

    Or, use the "ssh" transport for database nodes so that the
    installer can be transferred via SCP.

    For information on configuring transports, see:

        https://www.puppet.com/docs/bolt/latest/bolt_transports_reference.html
    |-HEREDOC
    # lint:endignore

  $exists = without_default_logging() || {
    run_command("test -e '${local_path}'", 'local://localhost',
      _catch_errors => true,
    ).ok()
  }

  unless $exists {
    run_task('peadm::download', 'local://localhost',
      source => $source,
      path   => $local_path,
    )
  }

  $local_size = run_task('peadm::filesize', 'local://localhost',
    path => $local_path,
  ).first['size']

  $targets_needing_file = run_task('peadm::filesize', $nodes,
    path => $upload_path,
  ).filter |$result| {
    $result['size'] != $local_size
  }.map |$result| {
    $result.target
  }

  upload_file($local_path, $upload_path, $targets_needing_file)
}