Puppet: Проблемы с Vcsrepo (git) «... существует, но не является требуемым репозиторием».

Puppet: Проблемы с Vcsrepo (git) «... существует, но не является требуемым репозиторием».

Я использую puppet/Vcsrepo для распространения и обновления программного обеспечения на нескольких серверах Linux с сервера Bitbucket(cloud). Это работало нормально в течение многих лет, но около 6 месяцев назад Puppet начал жаловаться на каждый репозиторий Error: Path /usr/local/tools/... exists and is not the desired repository.при каждом запуске. Я думаю, что проблема могла начаться, когда мы перешли с локальной версии Bitbucket на облачную версию.

Если я удаляю путь и запускаю puppet, он заменяет каталог, а затем снова блеет при следующем запуске. Я в итоге удалял репозитории всякий раз, когда мне нужно было их обновить.

Код puppet был упрощен до:

  define deploy(Array $names) {

    $names.each |$repo| {
      vcsrepo { "/usr/local/tools/$repo":
        ensure   => present,
        provider => git,
        user     => 'tools',
        source   => "https://[email protected]/uoa/$repo.git",
      }
    }

  }
  
.....

  $names_list = [
    'common-library',
    'common-tools'
  ]

  ...::deploy {"base-tools":
    names => $names_list,
  }

Есть идеи, в чем проблема или как ее диагностировать?

решение1

Да, патч CVE для gitсломанныйваша существующая конфигурация. Это было выпущено на Debian Buster в последние несколько дней, вызвав поломку там на системе puppet (5.5.10-4). Похоже, нет патча для vcsrepo 3.2.1, последней версии с поддержкой Puppet 5. Я не уверен, почему мои машины Bullseye, похоже, не затронуты.

Если вы можете обновиться до Puppet 6, то текущая версия vcsrepo справится с этой задачей.

Если нет, то в качестве обходного пути вы можете сделать следующее:

один раз:

      concat { '/etc/gitconfig' :
        owner   => 'root',
        group   => 'root',
        mode    => '0644',
      }

и затем в вашем определении внутри каждого цикла:

      concat::fragment { "gitconfig_$repo" :
        target  => '/etc/gitconfig',
        content => "[safe]\n\tdirectory = /usr/local/tools/$repo\n\n",
        before  => Vcsrepo["/usr/local/tools/$repo"],
      }

Связанный контент