我正在使用任务 ansible
剧本.yml
---
- hosts: servers
remote_user: user
become: True
become_user: user
become_method: sudo
gather_facts: no
tasks:
- name:
┆ ┆ copy:
┆ ┆ ┆ src: editProxy.sh
┆ ┆ ┆ dest: /tmp/editProxy.sh
┆ ┆ ┆ mode: 0755
┆ - name: run edit proxy settings for apt
┆ ┆ command: /tmp/editProxy.sh
编辑代理脚本
#!/bin/bash
if grep -q "old_proxy" /etc/apt/apt.conf; then
sed -i 's/old_proxy/new_proxy/g' /etc/apt/apt.conf;
fi
运行剧本 ansible-playbook palybook.yml --extra-vars='ansible_become_pass=passwd
脚本复制到服务器,并且不返回错误
更改:[10.1.1.1]
但是服务器上的更改不会发生,如果您在服务器上手动运行脚本,则更改会发生。可能是什么问题
答案1
这没有意义:
remote_user: user
become: True
become_user: user
become_method: sudo
您的剧本告诉 ansible 以用户 的身份连接到远程服务器,但您的剧本user
没有sudo
指定,而是指定了 同一用户!在其他一些评论中,您似乎希望您的剧本以 root 身份运行。如果是这种情况,那么您需要删除 ,以便 ansible能够。root
sudo
user
become_user: user
sudo
root
答案2
已经考虑使用 Ansible 原生的,而不是上传脚本并执行该脚本来运行 sed 来替换配置文件中的字符串更换模块? 例如类似这样的内容:
- name: Modify proxy settings for apt
replace:
path: /etc/apt/apt.conf
regexp: 'old_proxy'
replace: 'new_proxy'
backup: yes
答案3
尝试一下 ansible.builtin.script! 传输本地脚本后在远程节点上运行该脚本。