用ansible 完成一次性的工作(ad-Hoc)工作
Posted 蒋乐兴的技术随笔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用ansible 完成一次性的工作(ad-Hoc)工作相关的知识,希望对你有一定的参考价值。
ansible 真正强大的功能是它的playbook,但是在日常的工作中通过会遇到一些工作,它们只是需要我们偶尔操作一下;比较说重启一下
操作系统;像这样的工作就用不着ansible-playbook这样的牛刀了,用ansible就行了。
一、ad-Hoc 在多台主机上并行执行命令:
在刚开始进入linux 世界的时候呀,为了在多台linux主机上启动mysql数据库,我会一个个的登录上对应的linux主机,然后执行service mysqld start
混了一段时间后深知,勤劳也架不主机器多呀!后来呀就用bash 写一个for 循环,这样自己就从手工的劳动的释放出来了;但是这样事实上还是不是
太行的,主要表现在for 循环是串行执行的,也就是只有在启动完第一台主机的mysql后才会去启动第二台机器的mysql;也许你想到了"&"号可以使命令
能在后台执行,但是这个也是有问题的,因为这样就会一有太多的进程在后台执行,不知道自己主机的配置能不能跟的上;虽然我的理由有点牵强,但是
我想表达的是for 循环的形式的控制粒度太“粗糙”了。 看ansible 怎么做
1、启动work这台主机上的mysql服务
ansible work -a‘systemctl start mysql ‘ -uroot --become -f 1 work | SUCCESS | rc=0 >> ps -ef | grep mysql mysql 5146 1 8 14:48 ? 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf root 5184 4538 0 14:48 pts/1 00:00:00 grep --color=auto mysql
从ps 中的内容可以看到mysql数据库已经启动了
-u 用于指定sudo 的目标用户,我这里设定的是root用户
--become 是一个开着,它用于控制-u这个参数是不生效
-f 用于设置并行度,我这里设置为了1,因为work就是我的本机,也就是说目标主机只有一台,开并行并没有什么用。
2、文件传输把本地的/etc/my.cnf 传到目标机器的/tmp/my.cnf
ansible work -m copy -a‘dest=/tmp/my.cnf src=/etc/my.cnf‘ work | SUCCESS => { "changed": true, "checksum": "591767b936bdf730031e7964d548547327e30ad0", "dest": "/tmp/my.cnf", "gid": 1000, "group": "jianglexing", "md5sum": "278fe9fd1d837086edb3adbb2cd627df", "mode": "0664", "owner": "jianglexing", "size": 4376, "src": "/home/jianglexing/.ansible/tmp/ansible-tmp-1501052194.1641386-183941868489754/source", "state": "file", "uid": 1000 }
3、软件包管理(安装httpd)
ansible work -m yum -a‘name=httpd state=present‘ -uroot --become work | SUCCESS => { "changed": true, "msg": "", "rc": 0, "results": [ "Loaded plugins: fastestmirror, langpacks\nLoading mirror speeds from cached hostfile\n * epel: mirrors.ustc.edu.cn\nResolving Dependencies\n--> Running transaction check\n---> Package httpd.x86_64 0:2.4.6-45.el7.centos will be installed\n--> Processing Dependency: httpd-tools = 2.4.6-45.el7.centos for package: httpd-2.4.6-45.el7.centos.x86_64\n--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-45.el7.centos.x86_64\n--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-45.el7.centos.x86_64\n--> Running transaction check\n---> Package apr.x86_64 0:1.4.8-3.el7 will be installed\n---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed\n---> Package httpd-tools.x86_64 0:2.4.6-45.el7.centos will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n httpd x86_64 2.4.6-45.el7.centos local 2.7 M\nInstalling for dependencies:\n apr x86_64 1.4.8-3.el7 local 103 k\n apr-util x86_64 1.5.2-6.el7 local 92 k\n httpd-tools x86_64 2.4.6-45.el7.centos local 84 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package (+3 Dependent packages)\n\nTotal download size: 3.0 M\nInstalled size: 9.9 M\nDownloading packages:\n--------------------------------------------------------------------------------\nTotal 18 MB/s | 3.0 MB 00:00 \nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : apr-1.4.8-3.el7.x86_64 1/4 \n Installing : apr-util-1.5.2-6.el7.x86_64 2/4 \n Installing : httpd-tools-2.4.6-45.el7.centos.x86_64 3/4 \n Installing : httpd-2.4.6-45.el7.centos.x86_64 4/4 \n Verifying : httpd-tools-2.4.6-45.el7.centos.x86_64 1/4 \n Verifying : apr-1.4.8-3.el7.x86_64 2/4 \n Verifying : httpd-2.4.6-45.el7.centos.x86_64 3/4 \n Verifying : apr-util-1.5.2-6.el7.x86_64 4/4 \n\nInstalled:\n httpd.x86_64 0:2.4.6-45.el7.centos \n\nDependency Installed:\n apr.x86_64 0:1.4.8-3.el7 apr-util.x86_64 0:1.5.2-6.el7 \n httpd-tools.x86_64 0:2.4.6-45.el7.centos \n\nComplete!\n" ] }
----
以上是关于用ansible 完成一次性的工作(ad-Hoc)工作的主要内容,如果未能解决你的问题,请参考以下文章