Introduction To Ad-Hoc Commands Ad-Hoc命令介绍

下面的例子展示了如何使用 /usr/bin/ansible 来运行ad hoc任务。

什么是ad hoc命令?

一个ad hoc命令是一些我们可以非常快的打出,而不用为了后续的使用而保存。

在学习playbook语言之前,这是一个很好的位置来学习理解Ansible能做什么的基础 - ad-hoc命令也可以被用来快速做事情,这些事情没有必要写一个完整的playbook。

通常来说,Ansible真正的力量在于playbooks。为什么你使用ad-hoc任务而不是playbooks呢?

例如,在圣诞节的时候,你想要关闭实验室所有的电脑,你可以执行一行快速的命令,而无需写一个playbook。

对于配置管理和部署来说,你会使用 ‘/usr/bin/ansible-playbook’ 你在这里学习的概念也会适用playbook语言。

(关于 playbook 的更多信息,请参考 Playbooks )

如果你还没有阅读 Inventory文件 ,最好先看一看,然后我们继续往下。

Parallelism and Shell Commands 并行和shell命令

任意的例子。

让我们使用Ansible的命令行工具来重启所有的Atlanta的所有web服务器,每次启动十个。首先,让我们设置SSH-agent,以便记住我们的证书:

$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa

如果你不想使用ssh-agent,并且想要使用密码SSH代替keys,你可以使用--ask-pass(-k),但是最好是使用ssh-agent。

现在,在某个组中的服务器上运行命令,在这个例子中,组是atlanta,以10个并发进程执行:

$ ansible atlanta -a "/sbin/reboot" -f 10

/usr/bin/ansible将会默认使用你的帐号运行。如果你不想这个行为,传入-u <username。如果你想使用其他用户运行命令,如下所示:

$ ansible atlanta -a "/usr/bin/foo" -u username

你通常不会仅仅使用你的用户账户执行操作。如果你想要使用特权上升运行命令时:

$ ansible atlanta -a "/usr/bin/foo" -u username --become [--ask-become-pass]

如果你不是使用无密码特权上升方法(sudo/su/pfexec/doas等),使用 --ask-become-pass(-K)。这回交互式的提示你密码的使用。使用一个无密码设置会使得事情更加容易自动化,但这不是必要的。

become 不是root的用户使用 --become-user:

$ ansible atlanta -a "/usr/bin/foo" -u username --become-user otheruser [--ask-become-pass]

注意:
  很少的情况下,一些用户有安全规则,他们限制了他们的 sudo/pbrun/doas 环境中仅运行特定的命令。这和ansible的no-bootstrapping哲学不匹配,
  同时几百个模块不会预期工作。如果这样做,使用Ansible作为一个特殊账户,该账户应该没有这个限制。
  无需分享未授权用户的一种做法是使用Ansible Tower为Ansible把关,
  其可以持有一个SSH证书并且让某一个组织的成员按照自己的办法使用它,而不需要直接访问。

好了,这就是基础。如果你还没有阅读模式和组,先回去阅读模式吧。

上面的例子中指定的 -f 10 ,是使用10个进程同时操作。你可以在配置文件 Configuration file 中设置,而无需在这里。默认是5,是指非常小和保守的。你可能想要同时操作更多主机,适当调整这个是合适的。如果你有比fork值更多的主机数量,Ansible会自行协调, 只是花得时间会更长一点。尽管将这个值设置的高一点,只要Ansible机器能处理。

你也可以选择你要使用的Ansible模块。通常命令会包含一个 -m 指定模块名,默认的模块名是 'command' ,因此我们没有必要指定。后续我们会使用-m来运行其他模块About Modules。

注意

  command 在远程主机指定一个命令模块不支持扩展shell语法,例如管道和重定向(shell变量仍然可用)。如果你的命令要求shell特有的语法,使用shell模块。不同在 About Modules

使用节点中shell命令执行模块,类似如下:

$ ansible raleigh -m shell -a 'echo $TERM'

当使用Ansible ad-hoc 命令行(与playbooks相对) 运行任意命令,特别注意shell的引号规则,因此上述例子中,在传递给Ansible之前,本地shell没有将变量转化为本机变量值。例如,使用双引号代替单引号,$TERM变量将被本地shell计算,而不是远端主机的变量。

到目前为止,我们简单的举例command执行,但是大多数Ansible模块不是简单的命令脚本。相反,他们使用声明式的模型,计算和执行达到最终状态的的动作。更进一步,通过在模块开始之前检查当前的状态,如果当前状态是最终状态,不做任何事情,这样的话模块就是一个幂等的形式。但是我们也认识到,能运行任意命令也是重要的,所以Ansible对俩者都支持。

File Transfer 文件传输

这是 /usr/bin/ansible 的另外一种用法。Ansible能够以并行的方式同时SCP大量的文件到多台机器。命令如下:

$ ansible atlanta -m copy -a "src=/etc/hosts dest=/tmp/hosts"

若你使用playbooks,则可以利用template模块来做到更进一步的事情, (See module and playbook documentation)。

file模块允许更改文件的属主和权限。相同的选项也可以传入copy模块:

$ ansible webservers -m file -a "dest=/srv/foo/a.txt mode=600"
$ ansible webservers -m file -a "dest=/srv/foo/b.txt mode=600 owner=mdehaan group=mdehaan"

file模块也可以创建目录,类似于“mkdir -p”:

$ ansible webservers -m file -a "dest=/path/to/c mode=755 owner=mdehaan group=mdehaan state=directory"

递归的删除目录和文件

$ ansible webservers -m file -a "dest=/path/to/c state=absent"

Managing Packages 管理包

Ansible 提供对 yum 和 apt 的支持。这里是关于 yum 的示例。

确保一个包已经被安装,但是不更新:

$ ansible webservers -m yum -a "name=acme state=present"

确保一个包安装了并且是指定版本:

$ ansible webservers -m yum -a "name=acme-1.5 state=present"

确保一个包是最新的版本:

$ ansible webservers -m yum -a "name=acme state=latest"

确保一个包没有被安装:

$ ansible webservers -m yum -a "name=acme state=absent"

对于不同平台的软件包管理工具,Ansible都有对应的模块。如果没有,你也可以使用 command 模块去安装软件。或者最好是来为那个软件包管理工具贡献一个相应的模块。请在 mailing list 中查看相关的信息和详情。

Users and Groups 用户和组

“user” 模块可以很容易的操作已存在的用户帐号,和移除已存在的用户帐号

$ ansible all -m user -a "name=foo password=<crypted password here>"$ ansible all -m user -a "name=foo state=absent"

查看 About Modules部分获取所有变量的详细细节,包含如何操作组和组关系。

Deploying From Source Control 从源码控制系统部署

直接从git中部署你的webapp

$ ansible webservers -m git -a "repo=https://foo.example.org/repo.git dest=/srv/myapp version=HEAD"

因为Ansible模块可以通知change handlers,所以告知Ansible,当代码更新的时候执行指定任务,例如直接从git中部署Perl/Python/PHP/Ruby,并且重启apache。

Managing Services 管理服务

确保服务在所有的web服务器是启动的:

$ ansible webservers -m service -a "name=httpd state=started"

可选地,在所有的web服务器上重启一个服务:

$ ansible webservers -m service -a "name=httpd state=restarted"

确保一个服务是停止的:

$ ansible webservers -m service -a "name=httpd state=stopped"

Time Limited Background Operations 限制后台操作的时间

长时间运行的操作可以在后台运行,并且可以在后续检查它们的状态。例如为了在后台异步的执行long_running_operation,设置超时时间为3600秒(-B),且不需要轮询状态(-P):

$ ansible all -B 3600 -P 0 -a "/usr/bin/long_running_operation --do-stuff"

如果你决定要检查job状态,你可以使用 async_status模块,传递jobid给它,这个job id当你后台运行job时会返回给你:

$ ansible web1.example.com -m async_status -a "jid=488359678239.2844"

轮询是内建的,看起来像这样:

$ ansible all -B 1800 -P 60 -a "/usr/bin/long_running_operation --do-stuff"

其中 -B 1800 表示最多运行30分钟, -P 60 表示每隔60秒获取一次状态信息。

轮询模式是智能的,因此在任何机器上所有的job会在轮询之前启动。确保使用一个足够大的 --forks 值,如果你想要使所有的job快速的启动。在-B指定的时间用尽时,这个过程在远程节点上将会停止。

通常,你只会把后台长时间运行的shell命令或者软件升级。copy 模块后台化并不会做一个后台的文件拷贝(不像你想要的那样)。 Playbooks 同样支持轮询,并且有一个简化的语法。

Gathering Facts 收集Facts

facts在playbooks部分描述,其代表了某一个主机系统上发现的变量集。这些可以被用做任务的条件执行,也可以获取关于你系统的ad-hoc信息。你可以查看所有的facts通过如下方式:

$ ansible all -m setup

我们也可以对这个命令的输出做过滤,只输出特定的一些 facts,详情请参考 “setup” 模块的文档。

Read more about facts at Variables once you’re ready to read up on Playbooks.

转载于:https://www.cnblogs.com/pengyusong/p/7691504.html

【Ansible 文档】【译文】Ad-Hoc 命令介绍相关推荐

  1. Chpater2.3 执行AD HOC命令

    2.3 执行AD HOC命令 2.3.1 目标 学完这一章节,学生能去执行一个单独Ansible自动化任务通过ad hoc命令并且解释一些 ad hoc命令案例. 2.3.2 执行AD HOC命令使用 ...

  2. GNU sed 4.5 版参考文档全文翻译 各命令和随带20个示例详细解析(四)

    GNU sed 流编辑器 GNU sed 一个流编辑器(四) 5. 正则表达式:选择文本 5.1 sed正则表达式摘要 5.2 基础正则表达式和扩展正则表达式 5.3 基础正则表达式语法摘要 5.4 ...

  3. Kafka文档(1)---- 基本介绍(Getting Start)

    Apache Kafka官网首页翻译 Apache Kafka  是发布-订阅机制的消息传递系统,可以认为具有分布式日志提交功能. Fast 一个单独的Kafka  broker每秒可以处理来自成千上 ...

  4. python doc_Python文档生成工具pydoc使用介绍

    在Python中有很多很好的工具来生成字符串文档(docstring),比如说: epydoc.doxygen.sphinx,但始终觉得pydoc还是不错的工具,用法非常简单,功能也算不错,本文主要介 ...

  5. java 提取文档注释 命令,java文档注释及javadoc命令

    注释的三种类型: 1.单行注释(双斜线)// 2.多行注释(一次性将程序的多行注释掉)/*...*/ 3.文档注释:如果编写Java源代码是添加了合适的文档注释,然年后通过JDK提供的Javadoc工 ...

  6. 智能媒体管理产品文档转换/预览功能介绍(1)---Cloud Native架构

    一.导语 办公文档是每个人日常频繁使用的工具,ppt.word.xls.wps.pdf等为我们工作和生活带来了很多的便利,本文介绍在云计算和智能手机时代,基于 智能媒体管理 的新型Cloud Nati ...

  7. linux_sh/bash/shell_bash参考文档/查看可用shell /命令行编辑快捷键技巧/shell job任务管理/job vs process

    文章目录 sh/bash/shell_bash参考文档 references conclusion What Is a Shell? 查看本机的可用shell程序 sh sh on POSIX Sys ...

  8. MAME模拟器debug帮助文档汉化一(介绍)

    介绍 MAME是一个交互式仿真系统的调式器,用于调试或开发老式系统的仿真工具.可以用来创建作弊,HACKROM,或者研究软件的工作原理. 用-debug参数可以激活自带的调试器.默认设置中,用键盘的& ...

  9. 【快速文档】ad标签,我想通过小程序流量主赚钱,应该怎样做

    流量主介绍 流量主是普通制作微信小程序的一个主要的盈利方式.主要就是通过放置广告.首先,我们要知道流量主的开通条件. 开通条件:小程序累计独立访客(UV)1000以上,且无违规记录,即可开通流量主功能 ...

  10. python自带的文档生成工具_Python文档生成工具pydoc使用介绍

    在Python中有很多很好的工具来生成字符串文档(docstring),比如说: epydoc.doxygen.sphinx,但始终觉得pydoc还是不错的工具,用法非常简单,功能也算不错,本文主要介 ...

最新文章

  1. java 连接 MySQL
  2. MySQL的一级索引和二级索引介绍,HBase中提到的二级索引【笔记自用】
  3. 一次生产的 JVM 优化案例
  4. c语言考试算法,c语言考试常用算法docx.docx
  5. asp.net 读取excel文件
  6. Linux内存管理:kmemcheck介绍
  7. 软件框架的理解(转载)
  8. 量子计算机加密货币,量子计算机会打击到加密货币吗?
  9. Android基于ksoap2调用WCF服务(二):Android篇
  10. 乐源机器人没电提醒吗_云迹讲解机器人,你的专属机器人服务专家
  11. 怎么制定合理的开发计划
  12. linux导入iou iol的方法,网络实验环境搭建--3.如何使用IOL/IOU
  13. python打印九九乘法口诀_PYTHON如何打印九九乘法表
  14. 微信公众号开发之用户分组
  15. 亚马逊云科技:云厂商做自研芯片的两个「选择」
  16. 小程序订阅消息推送工具类
  17. QQ秀已然式微,而同时迭代的厘米秀正在雄起。
  18. 编程的本质是逻辑性思维
  19. Jvisualvm监控远程weblogic服务
  20. 大一上学期学习生活情况总结

热门文章

  1. Ubuntu搭建饥荒服务器教程
  2. oracle样例数据库,创建和准备Oracle样例数据库
  3. 为什么要重构(why)?
  4. Mongodb~连接串的整理
  5. MySQL 如何查看表的存储引擎
  6. 用过http api 发送邮件
  7. 学习HTML5+CSS3的第二天
  8. 【VMCloud云平台】SCAP(二)
  9. Oracle常用SQL总结
  10. 让一个从未接触过电脑的人测试浏览器