首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Ansible会在控制机器中创建目录,即使在使用本地连接运行剧本时delegate_to设置为remote

基础概念

Ansible 是一个自动化工具,用于配置管理、应用部署、任务自动化等。它通过 SSH 连接到目标机器(远程主机)来执行任务。Ansible 使用 YAML 格式的文件(称为剧本)来定义要执行的任务。

delegate_to 是 Ansible 中的一个参数,用于将任务委托给另一个主机执行。即使在使用本地连接运行剧本时,delegate_to 也可以指定远程主机。

相关优势

  1. 简化管理:Ansible 可以通过简单的 YAML 文件管理大量服务器,减少手动操作的工作量。
  2. 无代理架构:Ansible 不需要在目标机器上安装任何代理软件,只需 SSH 访问权限即可。
  3. 幂等性:Ansible 任务是幂等的,即多次执行同一个任务不会产生不同的结果。
  4. 模块化:Ansible 有大量的模块,可以处理各种系统和应用任务。

类型

Ansible 可以用于以下几种类型的管理任务:

  • 配置管理:确保系统配置的一致性。
  • 应用部署:自动化应用的安装和配置。
  • 任务自动化:执行日常维护任务,如备份、日志清理等。
  • 编排:协调多个系统和服务的工作流程。

应用场景

  • 数据中心管理:自动化大规模服务器集群的配置和管理。
  • 云环境部署:在云平台上快速部署和扩展应用。
  • 持续集成/持续部署(CI/CD):自动化代码构建、测试和部署流程。
  • 网络设备管理:管理路由器、交换机等网络设备。

问题分析

即使在使用本地连接运行剧本时 delegate_to 设置为远程主机,Ansible 会在控制机器中创建目录的原因可能与以下几点有关:

  1. 临时文件存储:Ansible 在执行任务时可能会生成一些临时文件,这些文件默认存储在控制机器的临时目录中。
  2. 任务依赖:某些任务可能依赖于在控制机器上创建的目录,即使这些任务最终会在远程主机上执行。
  3. 配置问题:Ansible 的配置文件或剧本中的设置可能导致在控制机器上创建目录。

解决方法

  1. 检查临时目录配置: 确保 Ansible 的临时目录配置正确。可以通过设置 ANSIBLE_CONFIG 环境变量来指定配置文件的位置,并在配置文件中设置 remote_tmplocal_tmp 参数。
  2. 检查临时目录配置: 确保 Ansible 的临时目录配置正确。可以通过设置 ANSIBLE_CONFIG 环境变量来指定配置文件的位置,并在配置文件中设置 remote_tmplocal_tmp 参数。
  3. 优化剧本: 检查剧本中的任务,确保只在必要时创建目录,并且这些目录的创建任务不会被委托到远程主机。
  4. 优化剧本: 检查剧本中的任务,确保只在必要时创建目录,并且这些目录的创建任务不会被委托到远程主机。
  5. 使用 delegate_tolocal_action: 如果某些任务确实需要在本地执行,可以使用 local_action 或在任务中明确指定 delegate_to: localhost
  6. 使用 delegate_tolocal_action: 如果某些任务确实需要在本地执行,可以使用 local_action 或在任务中明确指定 delegate_to: localhost

参考链接

通过以上方法,可以有效解决 Ansible 在控制机器中创建目录的问题,并确保任务的正确执行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

自动化运维利器Ansible要点汇总

Ansible是一款基于Python开发的自动化运维工具,实现了批量系统配置、批量程序部署、批量运行命令等功能,主要特点: 部署简单,只需主控端部署Ansible环境,被控端无需做任何操作,默认使用SSH...部署Ansible控制机需要python 2.7及以上,需要安装paramiko模块、PyYAML、Jinja2、httplib2等模块,若被管节点windows,则需要有powershell3并制授权远程管理...user管理用户账号 script指定节点运行服务端的脚本 Playbooks的一些技巧 playbook目录结构   webservice.yml入口,files目录存放静态文件,handlers...ansible-playbook执行logstash安装剧本 ansible-playbook /logstash/site.yml   这里不详细介绍playbook的使用,只摘出几个重要的使用场景方法...: "192.168.0.9"   如果没有delegate_to, 那么这个task会在第一台机器上执行 ignore_errors   指定 ignore_errors:true,任务失败继续完成剩余的任务

2K30
  • Ansible常用功能说明

    ansible默认情况下只会创建5个进程,所以一次任务只能同时控制5台机器执行。...配置控制超过5台机器,上面ansible: a)yum模块会先在5台机器上跑,完成后再继续剩余2台的机器; b)command模块的任务会一次性在所有机器上都执行了,然后监听它的回调结果; 这里需要注意下面两种情况...当在一个独立的群集环境配置,只是想操作其中的某一台主机,或者特定的主机上运行task任务,此时就需要用到ansible的任务委托功能。...使用delegate_to关键字可以配置task任务指定的机器上执行,就是说其他的task任务还是hosts关键字配置的机器运行,到了这个关键字所在的任务,就使用委托的机器运行。...可以和delegate_to 结合使用。 如果没有delegate_to, 那么这个task默认就会在第一台机器上执行!!!

    8.1K43

    Ansible自动化运维学习笔记1

    举个例子:你想把一个文件拷贝到目标主机的某个目录上,但是你不确定此目录是否已经存在此文件,当你使用ansible完成这项任务,就非常简单了,因为如果目标主机的对应目录已经存在此文件,那么ansible...则不会进行任何操作,如果目标主机的对应目录并不存在此文件,ansible就会将文件拷贝到对应目录; ansible是”以结果导向的”,我们指定了一个”目标状态”,ansible会自动判断,”当前状态...因为配置了密钥认证,所以可以实现免密码创建ssh连接,既然已经能够免密码创建ssh连接,那么配置”主机清单”,就没有必要再提供对应主机的用户名与密码了,所以完成了密钥认证的相关配置后,我们可以将清单的配置精简如下格式...可以使用meta模块来执行完某些task以后立即执行对应的handler;如果想要每个task实际操作后都立马执行对应handlers,则可以每个任务之后都添加一个meta任务并将其值设置flush_handlers...采用tasks默认都notify只能调用一个handlers任务,如果想调用多个handlers任务就采用listen关键字来设置监听组 tags 用法 描述: 实际使用这个剧本你可能只是想要执行其中的一部分任务而已

    4.1K31

    如何编写清晰的Ansible Playbook(复杂Playbook如何构建)

    集中运行 Playbook 使用一个专用的控制节点来控制对系统的访问和审计 Ansible 活动,让所有的 Ansible Playbook 都从上面运行。...这些任务即使检查模式也会运行。...嗯,简单介绍下,ansible 可以使用两种方式实现剧本的模块化: 包含内容:动态操作(include_task),playbook运行期间,Ansible会在内容到达处理包含的内容 导入内容:静态包含...创建LB、创建web Serve,部署 web app,这里把剧本行为抽象角色,然后deploy_*里面调用角色,实现了行为和剧本的解耦。...,用了一个dufault目录下的缺省变量和一个ansible的魔法变量,一个使用角色定义的剧本变量。

    3.3K10

    ansible批量管理软件部署及剧本

    content 当使用代替src参数,将文件的内容直接设置指定值。...如果src是一个目录,dest也必须是目录 directory_mode (added in 1.5) 当递归复制设置目录权限时,如果没有设置权限,将使用系统默认这个权限值设置目录上只对于最近创建的...,将到远程目标主机的机器上搜索 validate 文件复制到相应目录位置之前,运行验证命令要验证的文件的路径通过%s传递,并且要在下面的例子显示 实例: [root@m01 scripts]# ansible...注意如果设置null或状态设置present,它将停止工作,并将在随后的运行复制条目 对solaris系统没有效果 state 如果mountedfstab文件的设备将被激活挂载和适当配置...除非设置no,否则当创建账户或不存在主目录,将为用户创建一个主目录 user 创建,移除或修改的用户名称信息 别名:user uid 可选设置用户UID信息  实例: [root@m01 ansible-playbook

    2.9K70

    Ansible管理你的OpenStack cloud

    使用Ansible playbook自动升级、备份和扩展。 OpenStack上管理应用程序对系统管理员来说是一大挑战,而找到降低复杂性和产生一致性的方法是取得成功的关键因素。...通过使用Ansible,一种无代理的IT自动化技术,系统管理员可以创建Ansible剧本,提供一致性和减少复杂性。...OpenStack提供了丰富的API来管理资源,这导致了许多Ansible模块的创建,这些模块可以很容易地适应任何自动化工作流。...Ansible playbook使用serial关键字来确保一次只从池中删除一个节点。 如果数据库OpenStack云中运行,那么有时必须恢复备份—或者刷新一些测试数据,或者发生数据损坏事件。...某些情况下,用于任务的模块可能不存在,但Ansible足够灵活,允许开发模块之前调用剧本的任意命令。觉得你可以写缺少的模块?考虑通过贡献到Ansible项目来创建它。

    93400

    实战RHCA-DO407(1)

    /home/student/ansible/roles 练习环境workstation登录student用户,考试环境remote_user = matthew,这里是devops 解答 1.切换到...配置角色以使用时间服务器172.24.1.254(我们的实验室是172.25.254.254) 将角色配置将iburst参数设置启用 解答 1.安装这个角色,这里用yum安装不了,只能用ansible-galaxy...创建使用一个角色 根据以下要求/home/student/ansible/role创建一个名为apache的角色 复制默认模板目录到/tmp/custom/,并添加templates目录,创建角色指定模板目录.../tmp/custom 安装httpd包,启动启用,然后启动 防火墙已启用并使用允许访问web服务器的规则运行 一个模板文件index.html.j2存在,用于创建文件/var/www/html/index.html...,创建一个主分区,编号是1,大小1500MiB 格式化成ext4文件系统,挂在到/newpart 如果无法创建请求的分区大小,则应使用错误消息“无法创建该大小的分区”, 应该显示,而应该使用大小800Mib

    7.6K72

    非常好的Ansible入门教程(超简单)

    当我们本地机器运行ansible,我们不需要关心inventory文件的内容,我将告诉您在本地和远程服务器上运行ansible。...让我们将上述任务移到一本剧本ansible剧本(playbooks)和角色(roles)都使用Yaml文件定义。...该目录应该始终被命名roles,但并不强制。roles目录运行 ansible-galaxy init nginx 命令将创建新角色所需的目录和文件。...创建加密文件,系统会询问您必须使用的密码,以便稍后调用角色或Playbook进行编辑。 将密码保存在安全的地方。...ad-hoc命令 创建一个基本的Playbook来运行多个任务(tasks),并使用了处理程序(handlers) 将多个任务抽象一个角色,以保持所有Nginx相关的操作一个角色内 展示了如何设置依赖关系

    3.6K20

    云原生之 Ansible 篇(二)

    ---- ansible 之 tag 你写了一个很长的playbook,其中有很多的任务,这并没有什么问题,不过实际使用这个剧本,你可能只是想要执行其中的一部分任务而已,或者,你只想要执行其中一类任务而已...当等的对象端口,状态有started,stoped,即端口已经监听或者端口已经关闭;当等待的对象文件,状态有present或者started,absent,即文件已创建或者删除;当等待的对象一个连接...这种特性适用于以下场景: 告警系统启用基于主机的告警 向负载均衡器添加或移除一台主机 dns上添加或修改针对某个主机的解析 存储节点上创建一个存储以用于主机挂载 使用一个外部程序来检测主机上的服务是否正常...connection: local run_once: true 还可以与delegate_to配合使用,让这个只执行一次的任务指定的机器运行: - name: run the task locally...如下场景可能需要用到环境变量: 运行shell的时候,需要设置path变量 需要加载一些库,这些库不在系统的标准库路径当中 下面是一个简单示例: --- - name: upload a remote

    1.5K20

    学习如何安装Ansible运行Playbooks

    某些系统可能要求您以root身份运行Ansible命令。如果是这样,请ansible本指南中使用前缀命令sudo。 安装Ansible 只需要在控制机器运行命令的机器上安装Ansible 。...如果您正在运行OS X,您可能想在其他地方创建自己的Ansible目录,然后Ansible配置文件设置路径: mkdir ~/Path/To/ansible touch ~/Path/To/ansible...重要的是要注意,与其他配置工具不同,剧本不描述机器的状态,Ansible确定需要自己进行的所有更改。但是,剧本应该被设计幂等的,这意味着它们可以不止一次地运行而没有负面影响。...名称行后面是将运行的模块(本例服务模块),其他属性提供了更多选项,在这种情况下,指示Ansible使用sudo权限(稍后我们将配置)。...Ansible创建密码哈希,以便在与服务器通信使用。一个简单的方法是使用Python的PassLib库,可以安装sudo pip install passlib。

    5K10

    Ansible自动化运维学习笔记1

    举个例子:你想把一个文件拷贝到目标主机的某个目录上,但是你不确定此目录是否已经存在此文件,当你使用ansible完成这项任务,就非常简单了,因为如果目标主机的对应目录已经存在此文件,那么ansible...则不会进行任何操作,如果目标主机的对应目录并不存在此文件,ansible就会将文件拷贝到对应目录; ansible是”以结果导向的”,我们指定了一个”目标状态”,ansible会自动判断,”当前状态...因为配置了密钥认证,所以可以实现免密码创建ssh连接,既然已经能够免密码创建ssh连接,那么配置”主机清单”,就没有必要再提供对应主机的用户名与密码了,所以完成了密钥认证的相关配置后,我们可以将清单的配置精简如下格式...控制节点具有管理主机所需的所有软件; 2.清单配置详解 描述:该清单文件包含有关你会Ansible管理的主机信息 清单文件包括从一到数百台服务器的任何位置,并且可以将主机组织组和子组。...采用tasks默认都notify只能调用一个handlers任务,如果想调用多个handlers任务就采用listen关键字来设置监听组 tags 用法 描述: 实际使用这个剧本你可能只是想要执行其中的一部分任务而已

    1.9K20

    如何控制Ansible Playbook的执行顺序、运行选定的剧本资源

    ——王小波」 ---- 对 Ansible 剧本资源打标签 处理大型或复杂的剧本,如果只希望运行部分剧本或部分任务。可以将标签应用于可能要跳过或运行的特定资源。...通过标签来标记资源,资源上使用tags关键字,然后是要应用的标记列表。Ansibletags标记可用于下列资源: 每个任务,这是使用标签的最常见方式之一。 整个剧本,在剧本级别使用标签指令。...,个别剧本资源不运行,可以在运行ansible-playbook命令,使用--skip-tags选项跳过带有特定标签的任务。...使用 include_role ,Ansible 会在 play 执行期间到达 include_role 任务解析角色并插⼊到 play 。...使用include_role任务,如果when指令的条件 false,则 Ansible不解析角色。

    2.6K10

    Ansible高级用法(运维开发篇)

    # remote_port = 22 6. host_key_checking # 这是设置是否检查ssh主机的秘钥,可以设置True或者False # host_key_checking = False...,需要设置log_path来指定一个存储Ansible日志的文件 9. private_key_file # 使用ssh公钥私钥登录系统使用的秘钥路径 # private_key_file=/path...也许这是常识,但也值得分享:任何管理系统受益于被管理的机器主控机附近运行.如果在云中运行,可以考虑使用云中的一台机器运行Ansible.....使用Ansible,你可能不想遇到这样的情况:如果有个主机没有“known_hosts”中被初始化将会导致交互使用Ansible或定时执行Ansible对key信息的确认提示....> remote_user:指定远端主机的哪个用户来登录远端系统, # 远端系统执行task的用户,可以任意指定,也可以使用sudo, # 但是用户必须要有执行相应task的权限。

    3.5K52

    现代 IT 人一定要知道的 Ansible系列教程:持续交付和滚动升级

    它们可以模板中使用 playbook 来自定义行为并提供易于更改的设置和参数。它们存储与库存位于同一位置的目录。 这是 lamp_haproxy 的文件。...正如我们所期望的,这些变量将应用于您库存的所有机器: --- httpd_port: 80 ntpserver: 192.0.2.23 这是一个 YAML 文件,我们可以为更复杂的变量结构创建列表和字典...本例,我们只需设置两个变量,一个用于 Web 服务器的端口,另一个用于 我们的机器应该使用 NTP 服务器来进行时间同步。 这是另一个组变量文件。...如果只有少数几个 Web 服务器,则可能需要一次一台主机设置 1。如果你有 100,也许你可以设置 10,一次。...对于 Ansible 具有模块的负载均衡器,可能希望它们联系 API 将其作为 a 运行。如果你一些没有模块的硬件开发任何有趣的东西,它可能会做出很好的贡献!

    31210

    基于 Jenkins Kubernetes 上配置 CICD

    我们将使用安装了 Docker 和 Kubernetes 的 CentOS 7 机器。...现在您可以看到Jenkins正在安装一些插件: 之后,您将转到一个页面,您必须在其中创建第一个管理员用户: 准备 Jenkins 服务器 Jenkins 提供了一种简单的方法来几乎任何语言和源代码存储库的组合设置持续集成和持续交付环境...它也可以进行IT编排,您必须按顺序运行任务并创建事件链以多个不同的服务器或设备上运行。...然后运行: $ helm init --upgrade Jenkins 上安装 Docker 插件 → Docker 插件允许使用 docker 主机动态设置构建代理,运行单个构建,然后将映像推送到注册表...部署 Helm Chart 让我们创建一个 Ansible 剧本来调用 Helm Chart $ cp -r ci-cd-k8s/ansible/sayarapp-deploy /var/lib/jenkins

    2.2K31

    Ansible剧本(playbook)编写

    也可以这么理解,playbook 字面意思,即剧本,现实由演员按照剧本表演,Ansible,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。...Playbook的使用优势 功能比ansible命令更强大 能很好的控制先后执行顺序, 以及依赖关系 语法展现更加的直观 ansible命令无法持久使用, playbook 可以持久使用 剧本的书写格式要求...我们已经体验了使用剧本来安装服务,但是上述的简单ansible剧本存在一定的局限性 全部写成一行虽然看起来整洁,但是有一些特性没办法使用 比如同时需要创建多个目录,启动多个服务,需要重复写多条语句 参数不直观.../ansible/latest/user_guide/playbooks_loops.html 使用情景: 需要创建多个目录 需要启动多个服务 具体实现: 同时创建2个目录/data和/backup -...基于事实的条件: 只有操作系统是特定版本,才能安装特定包。 您可以跳过具有内部 IP 地址的主机上配置防火墙。 只有文件系统已满,才能执行清理任务。

    2K40

    使用 Ansible 来管理你的工作站:配置自动化

    为了达到这个要求,创建一个名为任务手册taskbook的东西,它和剧本playbook很像但内容更加的流线型。让我们 Git 库任务手册创建一个目录。...mkdir tasks local.yml 剧本的代码可以很好地过渡安装包文件的任务手册。让我们把这个文件移动到刚刚创建好的 task 目录,并重新命名。...从这里开始,ansible-pull 的定时作业将会在后台每隔十分钟运行一次来检查你的仓库是否有变化,如果它发现有变化,将会运行你的剧本并且应用你的任务手册。...当你第一次设置一台新的笔记本或者台式机的时候,你要去手动的运行 ansible-pull 命令,但仅仅是第一次的时候。从第一次之后,用户 ansible会在后台接手后续的运行任务。...现在你可以尝试通过我们使用Ansible 库来自动复制这些配置到你的机器。在这篇文章,我已将向你展示了如何去复制文件,所以去尝试以下看看你是都已经能应用这些知识。

    57210

    关于Linux自动化配置服务和网络接口的一些笔记

    针对每一个角色,ansible会到固定的目录去调取特定的数据,使用角色不指定hosts: 清单主机列表,而是交给调用此角色的剧本来指定....的所有配置,命令操作,都是一个指定文件夹下进行的,Ansible执行临时命令或者剧本时会扫描当前工作目录,满足要求才会执行,否则会发出警告。...remote_user=root # 角色目录 roles_path=roles # 设置用户的su 提权 [privilege_escalation] become=True become_method...对应的角色包rhel-system-roles.network 下面我们使用角色rhel-system-roles.network,以及角色network_connections变量配置网络。...角色的执行,首先需要拷贝对应的角色包当前角色目录下,然后编写需要替换的变量文件(即tasks/main.yml的变量),我们可以host_vars主机变量文件夹下编写,之前需要编写执行角色的剧本

    2.4K20

    ansible

    Ansible 定制自动化的任务集编排工具 /usr/bin/ansible-pull  Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器使用,对运维的架构能力要求较高)...state=link的情况 state  #状态,有以下选项: directory:如果目录不存在,就创建目录 file:即使文件不存在,也不会被创建 link:创建软链接 hard:创建硬链接 touch...其主要选项如下: comment  # 用户的描述信息 createhome  # 是否创建目录 force  # 使用state=absent, 行为与userdel –force一致. group...  # 指定基本组 groups  # 指定附加组,如果指定为(groups=)表示删除所有组 home   # 指定用户家目录 move_home  # 如果设置home=, 试图将用户主目录移动到指定的目录...常用的选项如下: gid=  #设置组的GID号 name=  #指定组的名称 state=  #指定组的状态,默认为创建设置absent删除 system=  #设置yes,表示创建系统组

    3.9K20
    领券