Ansible:如何更新在命令 运行 上的 vim 编辑器中打开的文件

Ansible : How to update file that opens in vim editor on running of a command

我需要使用 ansible 更新文件。在手动更新过程中,当编辑命令为 运行 时,文件会在 vim、nano 等编辑器中打开,并在其中更新和保存更改。

即 在 运行 以下命令后,将在命令中指定的编辑器中打开一个临时文件, sudo OC_EDITOR="nano" oc edit configmap/webconsole-config -n openshift-web-console

请注意,每次当命令为 运行 时,内容都会在新的临时文件中打开。更改更新后,文件将保存到 docker 容器中。

由于在上述命令中指定编辑器为nano,文件内容在nano编辑器中打开,内容如下:

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
apiVersion: v1
data:
  webconsole-config.yaml: |
    apiVersion: webconsole.config.openshift.io/v1
    clusterInfo:
      adminConsolePublicURL: https://console.router.default.svc.cluster.local/
      consolePublicURL: https://master.novalocal:8443/console/
      masterPublicURL: https://master.novalocal:8443
    extensions:
      properties: {}
      scriptURLs: []
      stylesheetURLs:[]
    features:
      clusterResourceOverridesEnabled: false
      inactivityTimeoutMinutes: 0
.
.
.

此处stylesheetURLs需要在文件中更新如下:

.
.
      scriptURLs: []
      stylesheetURLs:
      - http://127.0.0.1:30296/css/logo.css
    features:
      clusterResourceOverridesEnabled: false
.
.
.

这里stylesheetURLs需要更新缩进如前所述,其他内容的缩进需要保留

如何在 ansible 剧本中实现这一点?

附加信息:此目的是更新okd/openshift 3.11 的网络控制台徽标,参考:https://docs.okd.io/3.11/install_config/web_console_customization.html

你问错问题了。 objective 不是 "how to I disable $EDITOR" 而是 "how to I edit configs and then re-apply them," 这正是 kubectl edit oc edit 为你做的:oc get -o yaml -n openshift-web-console configmap/webconsole-config > $TMPDIR/some-file.yaml && $EDITOR $TMPDIR/some-file.yaml && oc -n openshift-web-console apply -f $TMPDIR/some-file.yaml && rm $TMPDIR/some-file.yaml

你会发现一整套 ansible 机制,允许你以非常精确的方式更改文本文件的内容,所以只需在你的剧本中重现它,不需要 "nano"

- set_fact:
    my_temp_path: /tmp/some-random-filename.yaml
- shell: >-
    oc get -o yaml -n openshift-web-console 
    configmap/webconsole-config >{{ my_temp_path }}
- lineinfile:
     path: '{{ my_temp_path }}'
     # whatever else
- command: oc -n openshift-web-console apply -f {{ my_temp_path }}
- file:
    path: '{{ my_temp_path }}'
    state: absent