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
我需要使用 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