передача нескольких функций в удаленную оболочку / mkdir не может найти каталог - PullRequest
0 голосов
/ 08 февраля 2020

Я пишу сценарий BASH, способный развернуть и настроить весь кластер эластичного поиска. В настоящее время у меня есть два сценария установки и сценарий конфигурации, который обрабатывает все S SH logi c и конфигурацию безопасности.

Кажется, что все работает отлично, за исключением двух функций.

    echo "Transmitting functions and arrays for remote execution!"
    ssh -T "root@$kbip" <<-LIMITBREAK
        eval `typeset -p kibConfigSer`
        eval `typeset -p kibConfigChan`
        eval `typeset -p esip`
        `declare -f checkLocalKibanaConfig`; checkLocalKibanaConfig
        `declare -f createDirectories`; createDirectories
    LIMITBREAK
        echo
        echo "Transmitting functions and array for remote execution!"
        ssh -T "root@$allnodes[x]" <<-LIMITBREAK
            eval `typeset -p esConfig`
            `declare -f checkLocalElasticConfig`; checkLocalElasticConfig
            `declare -f createDirectories`; createDirectories
        LIMITBREAK

Это HEREDOC, которые я использую для определения функций в удаленной оболочке. На данный момент первый заявленный работает нормально. Он может передать массив esConfig со всеми настройками конфигурации, и функция checkLocalElasticConfig определена и может получить доступ к строкам в массиве.

Однако, независимо от того, что я пытаюсь, второе объявление делает ничего. Logi c проверяет наличие каталога kibana directory / elasti c и успешно проверяет, что каталог certs отсутствует. Но когда он пытается выполнить команду mkdir ...

mkdir: Cannot create directory '/etc/directory/certs': No such file or directory

, я полностью ошеломлен. Я знаю, что et c существует, я знаю, что каталог существует, и сертификатов не существует, которые должна обрабатывать эта функция:

function createDirectories () 
{
    #Checks if ElasticSearch is present
    if [ -d "/etc/elasticsearch" ] 
    then
        if [ -d "/etc/elasticsearch/certs" ] 
        then
            echo "Directory /etc/elasticsearch/certs exists." 
        else
            echo "/etc/elasticsearch/certs in ElasticSearch does not exist! Making directory!"
            mkdir "/etc/elasticsearch/certs"
        fi
    fi

    #Checks if Kibana is present
    if [ -d "/etc/kibana" ] 
    then
        if [ -d "/etc/kibana/certs" ] 
        then
            echo "Directory /etc/kibana/certs exists." 
        else
            echo "/etc/kibana/certs in Kibana does not exist! Making directory!"
            mkdir "/etc/Kibana/certs"
        fi
    fi
}

.

Цель этого сценария состоит в том, что Функция createDirectory доступна для локального использования и при необходимости определяется для удаленного использования при настройке узлов кластера.

Есть идеи, что я делаю неправильно? Или что я мог бы сделать лучше?

1 Ответ

0 голосов
/ 08 февраля 2020

Linux чувствительно к регистру. Вы проверяете if [ -d "/etc/kibana" ], но mkdir пытается создать каталог под /etc/Kibana.

...