Как мне выполнить поиск файла File объекта Puppet для определения наличия атрибута? - PullRequest
1 голос
/ 07 июля 2019

Я хочу найти все манифесты во всех моих модулях, которые используют объект File и не имеют атрибута "owner".

Например, у меня есть этот объект File:

file { '/etc/mydir':
  source  => 'puppet:///modules/mymodule/mydir_settings',
  ensure  => 'directory',
  recurse => true
}

И отсутствует атрибут «владелец».Я хочу иметь возможность выполнить поиск этого манифеста и найти этот файловый объект с отсутствующим атрибутом "владелец".

Лучший вариант поиска с помощью grep (при поиске в Интернете) заключается в следующем:

grep -Pzo -e "file\s+{[^}]*}" ./manifests/init.pp

Но у него есть следующие недостатки:

1) Он не «подсвечивает» эти объекты с отсутствующим атрибутом «владелец».2) Не удается отобразить файловые объекты, которые имеют переменную с фигурными скобками, например:

 file { "/etc/myotherdir/${var1}":

3) Не удается игнорировать закомментированные файловые объекты (что не является плохой вещью,но он просто не обрабатывает, знает, как с ними обращаться)

Я хотел бы иметь возможность получать выходные данные всех (и только) файловых объектов, у которых отсутствует атрибут "владельца".

1 Ответ

1 голос
/ 07 июля 2019

Похоже, что это может быть то, что вы ищете, но без более репрезентативного семпла ввода / вывода это предположение:

$ cat tst.awk
/^file[[:space:]]+{/ { inFileObj = 1 }

inFileObj {
    rec = rec $0 ORS

    if ( /^[[:space:]]*owner[[:space:]]*=>/ ) {
        gotOwner = 1
    }

    if ( /^}$/ ) {
        if ( ! gotOwner ) {
            printf "%s", rec
        }
        inFileObj = gotOwner = 0
        rec = ""
    }
}

$ awk -f tst.awk file
file { '/etc/mydir':
  source  => 'puppet:///modules/mymodule/mydir_settings',
  ensure  => 'directory',
  recurse => true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...