Invoke-Expression Неожиданная ошибка токена при замене переменной в файле - PullRequest
0 голосов
/ 17 января 2020

Я хочу изменить версию в моем файле deploy.yaml с powershell. Мой файл (deploy.yaml):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: worker
  labels:
    app: worker
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: worker
    spec:
      nodeSelector:
        environment: production
        role: apps
      containers:
      - name: worker
        image: https://hub.docker.com/worker:$version
        env:
        - name: ENVIRONMENT
          value: "Production"
        - name: LOGS_DIRECTORY
          value: "/var/log/worker/"

Когда я выполняю powershell:

$version = "1.01"
$workerTemplate = (Get-Content ./deploy.yaml) -join "`n"
$expandedWorkerTemplate = Invoke-Expression "`"$workerTemplate`""

Я получаю сообщение об ошибке:

Invoke-Expression : At line:22 char:19
+           value: "Production"
+                   ~~~~~~~~~~~
Unexpected token 'Production"
        - name: LOGS_DIRECTORY
          value: "/var/log/worker/""' in expression or statement.
At line:4 char:27
+ $expandedWorkerTemplate = Invoke-Expression "`"$workerTemplate`""
+                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Invoke-Expression], ParseException
    + FullyQualifiedErrorId : UnexpectedToken,Microsoft.PowerShell.Commands.InvokeExpressionCommand

Что можно сделать, чтобы избежать это?

1 Ответ

0 голосов
/ 17 января 2020

Я думаю, это было бы неплохо для оператора строки формата PowerShell :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: worker
  labels:
    app: worker
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: worker
    spec:
      nodeSelector:
        environment: production
        role: apps
      containers:
      - name: worker
        image: https://hub.docker.com/worker:{0}
        env:
        - name: ENVIRONMENT
          value: "Production"
        - name: LOGS_DIRECTORY
          value: "/var/log/worker/"

Затем вы бы расширили свой шаблон следующим образом:

$version = "1.01"
$workerTemplate = Get-Content ./deploy.yaml -Raw
$expandedWorkerTemplate = $workerTemplate -f $version
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...