Назад | Перейти на главную страницу

Как загрузить файл на удаленный узел в Rundeck?

Я новичок в Рундеке. Я хочу иметь возможность передать файл (в качестве обязательного варианта) в вызов задания Rundeck, а затем заставить Rundeck загрузить этот файл на удаленный узел, а затем запустить команду на удаленном узле, чтобы что-то сделать с файлом. Это работает со значением по умолчанию rundeck узел, но не удаленный узел.

У меня есть экземпляр Rundeck (версия 3.0.21-20190424) в сети, и он успешно взаимодействует с одним внешним узлом. В документация объясняет, как получить текст параметры, передаваемые через соединение SSH в качестве переменных среды на удаленный узел, но ничего не говорит о том, как получить файл параметр для передачи удаленному узлу.

Это мое определение работы:

- defaultTab: summary
  description: Test Job
  executionEnabled: true
  id: 62fdba6d-70c8-4174-9bab-dde364076e8c
  loglevel: INFO
  name: test2
  nodeFilterEditable: false
  nodefilters:
    dispatch:
      excludePrecedence: true
      keepgoing: false
      rankOrder: ascending
      successOnEmptyNodeFilter: false
      threadcount: '1'
    filter: .*
  nodesSelectedByDefault: true
  options:
  - description: This is an example of a text option.
    name: example_text_option
  - description: This is an example file option.
    name: example_file_option
    required: true
    type: file
  scheduleEnabled: true
  sequence:
    commands:
    - fileExtension: sh
      script: |-
        #!/usr/bin/env bash

        echo "hostname: $(hostname)"
        echo "PWD: $PWD"

        echo ----
        echo "RD_OPTION_EXAMPLE_FILE_OPTION (UUID): $RD_OPTION_EXAMPLE_FILE_OPTION"
        echo "RD_FILE_EXAMPLE_FILE_OPTION_FILENAME (Original file name): $RD_FILE_EXAMPLE_FILE_OPTION_FILENAME"
        echo "RD_FILE_EXAMPLE_FILE_OPTION_SHA (SHA256 has of file): $RD_FILE_EXAMPLE_FILE_OPTION_SHA"

        echo ----
        echo "option.example_file_option: @option.example_file_option@"
        echo "file.example_file_option: @file.example_file_option@"
        echo "file.example_file_option.fileName: @file.example_file_option.fileName@"
        echo "file.example_file_option.sha: @file.example_file_option.sha@"

        echo ----
        ls -l @file.example_file_option@
    keepgoing: false
    strategy: node-first
  uuid: 62fdba6d-70c8-4174-9bab-dde364076e8c

Это результат работы на rundeck узел:

hostname: rundeck
PWD: /home/rundeck
----
RD_OPTION_EXAMPLE_FILE_OPTION (UUID): 8c370949-51d8-467a-8f2d-b80774469e8b
RD_FILE_EXAMPLE_FILE_OPTION_FILENAME (Original file name): 2aOErzD.jpg
RD_FILE_EXAMPLE_FILE_OPTION_SHA (SHA256 has of file): b5e490d0f96d033367b8a4addef58b7e2904ea3c7465b2f801b600443ef562ec
----
option.example_file_option: 8c370949-51d8-467a-8f2d-b80774469e8b
file.example_file_option: /home/rundeck/var/upload/8c370949-51d8-467a-8f2d-b80774469e8b
file.example_file_option.fileName: 2aOErzD.jpg
file.example_file_option.sha: b5e490d0f96d033367b8a4addef58b7e2904ea3c7465b2f801b600443ef562ec
----
-rw-r--r-- 1 rundeck rundeck 115069 Sep  3 15:20 /home/rundeck/var/upload/8c370949-51d8-467a-8f2d-b80774469e8b

Это результат работы на удаленном узле:

hostname: test_node
PWD: /home/rundeck
----
RD_OPTION_EXAMPLE_FILE_OPTION (UUID): 8c370949-51d8-467a-8f2d-b80774469e8b
RD_FILE_EXAMPLE_FILE_OPTION_FILENAME (Original file name): 2aOErzD.jpg
RD_FILE_EXAMPLE_FILE_OPTION_SHA (SHA256 has of file): b5e490d0f96d033367b8a4addef58b7e2904ea3c7465b2f801b600443ef562ec
----
option.example_file_option: 8c370949-51d8-467a-8f2d-b80774469e8b
file.example_file_option: /home/rundeck/var/upload/8c370949-51d8-467a-8f2d-b80774469e8b
file.example_file_option.fileName: 2aOErzD.jpg
file.example_file_option.sha: b5e490d0f96d033367b8a4addef58b7e2904ea3c7465b2f801b600443ef562ec
----
ls: cannot access '/home/rundeck/var/upload/8c370949-51d8-467a-8f2d-b80774469e8b': No such file or directory
Failed: NonZeroResultCode: Remote command failed with exit status 2`

Очевидно, что, вероятно, можно сделать это в несколько этапов, то есть скопировать файл с узла rundeck на узел назначения, но это похоже на то, что Rundeck должен автоматизировать для меня. Кроме того, это кажется очень обычным делом, поэтому я не уверен, почему мне так сложно найти какую-либо информацию об этом.

Любые предложения приветствуются.

В конфигурации вашего проекта настройте SSH в качестве исполнителя узла по умолчанию и настройте SCP в качестве копира файлов по умолчанию. Затем создайте задание, в котором есть шаг копирования файла, за которым следует шаг команды («Выполнить удаленную команду»). Вам также потребуется настроить соответствующий источник узла для проекта. Выглядит это так: Настройка задания - рабочий процесс

- defaultTab: nodes
  description: ''
  executionEnabled: true
  id: c7579365-98a9-4503-8192-149e41bfd711
  loglevel: INFO
  name: Copy File
  nodeFilterEditable: false
  nodefilters:
    dispatch:
      excludePrecedence: true
      keepgoing: false
      rankOrder: ascending
      successOnEmptyNodeFilter: false
      threadcount: '1'
    filter: group:dev site:auburn service:bioraft3
  nodesSelectedByDefault: true
  options:
  - name: File
    type: file
  scheduleEnabled: true
  sequence:
    commands:
    - configuration:
        destinationPath: /tmp/${file.File.fileName}
        echo: 'true'
        recursive: 'false'
        sourcePath: ${file.File}
      nodeStep: true
      type: copyfile
    - exec: cat /tmp/${file.File.fileName}
    keepgoing: false
    strategy: node-first
  uuid: c7579365-98a9-4503-8192-149e41bfd711