Ansible 七(ad hoc任务)

Ansible 七(ad hoc任务)

ansible任务

ad hoc任务就是执行shell命令、或shell脚本。

ansible ad-hoc命令

可以执行一些简单的命令,不需要将这些执行的命令特别保存下来。

适合执行简单的命令。

ansible playbook

可以解决比较复杂的任务,可以将命令保存下来。

适合执行配置管理或部署客户机。

并行性和shell命令


重启webservers主机组里的所以机器,每次重启10台

ansible webservers -a "/sbin/reboot" -f 10

以test01用户身份在webservers组的所以主机运行foo命令

ansible webservers -a "/usr/bin/foo" -u test01

以test01用户身份sudo执行foo(如果有sudo密码加上--ask-sudo-pass(-k))

ansible webservers -a "/usr/bin/foo" -u test01 --sudo [--ask-sudo-pass]

也可以sudo到其他用户执行命令非root

ansible webservers -a "/usr/bin/foo" -u username -U otheruser [--ask-sudo-pass]

前面命令用到的-f 10选项表示使用10个并行的进程。

这个选项也可以在ansible的配置文件中设置,默认是5。

如果主机数大于设置的并发数,ansible会自行协调,花的时间稍微长一点。

ansible有许多模块,默认是命令模块:“command” ,这个模块不支持shell变量和管道等。

我们可以通过-m选项来指定不同的模块。例如shell模块

模块相关了解:http://www.ansible.com.cn/docs/modules.html

使用shell模块在客户主机上执行命令

ansible webservers -m shell -a "echo $TERM"  #查看当前系统是linux

文件传输(file transfer)

拷贝本地的/etc/hosts文件到webservers主机组所以主机的/tmp/hosts;

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

若使用playbooks,则可以利用template模块来做到跟进一步的事情:(请参见 module 和 playbook 的文档)

使用file模块修改文件的属主和权限(在这里可替换为copy模块是等效的)

ansible webservers -m file -a "dest=/tmp/hosts mode=600"
ansible webservers -m file -a "dest=/tmp/hosts mode=600 owner=test01 group=test01"

#修改远程客户机/tmp/hosts权限为600,属主和属组都为test01

使用file模块创建目录,与执行mkdir -p 效果类似

ansible webservers -m file -a "dest=/tmp/abc mode=755 owner=test01 group=test01 state=directory"

#在webservers组里的所以主机上创建abc目录,权限为755,属主和属组都为test01

使用file模块删除目录(递归的删除)和删除文件

ansible webservers -m file -a "dest=/tmp/abc state=absent"

管理软件包(managing packages)

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

确认httpd软件包安装,不更新(如果已安装不更新)

ansible webservers -m yum -a "name=httpd state=present"

返回如下:
1.1.1.2 | SUCCESS => {
    "changed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "httpd-2.4.6-45.el7.centos.4.x86_64 providing httpd is already installed"
    ]
}
1.1.1.3 | SUCCESS => {
    "changed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "httpd-2.4.6-45.el7.centos.4.x86_64 providing httpd is already installed"
    ]
}

确认httpd软件包的版本

ansible webservers -m yum -a "name=httpd-2.4* state=present"

确认httpd软件包更新到最新版本

ansible webservers -m yum -a "name=httpd state=latest" 
返回如下:
1.1.1.2 | SUCCESS => {
    "changed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "All packages providing httpd are up to date", 
        ""
    ]
}
1.1.1.3 | SUCCESS => {
    "changed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "All packages providing httpd are up to date",  #所有的软件包提供的服务器是最新的
        ""
    ]
}

确认httpd软件包还没有安装(卸载httpd)

ansible webservers -m yum -a "name=httpd state=absent"

用户和组(user and groups)

使用user模块可以方便的创建用户、删除用户、或管理现有的用户

#创建用户test02

ansible all -m user -a "name=test02 password=123456789"

#删除用户test02

ansible all -m user -a "name=test02 state=absent"

源码部署

直接使用 git 部署 webapp:

ansible模块能够通知变更,当代码更新时,可以告诉ansible做一些特定的任务。

比如从git部署代码然后重启apache服务等

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

服务管理(managing services)

安装httpd服务

ansible all -m yum -a "name=httpd state=present"

启动httpd服务

ansible all -m service -a "name=httpd state=started"

重启httpd服务

ansible all -m service -a "name=httpd state=restarted"

关闭httpd服务

ansible all -m service -a "name=httpd state=stopped"

卸载httpd服务

ansible webservers -m yum -a "name=httpd state=absent"

后台运行(需要长时间运行的命令Time Limited Background Operations)

后台执行命令3600s,-B表示后台执行的时间

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

检查任务的状态

ansible all -m async_status -a "jid=123456789"

后台执行命令最大时间是1800s 即30 分钟,-P 每60s 检查下状态默认15s

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

搜集系统信息(gathering facts)

搜集主机的所以系统信息

ansible webservers -m setup

搜集系统信息并以主机名为文件名分别保存在/tmp/facts目录

ansible webservers -m setup --tree /tmp/facts

#搜集系统版本信息

ansible webservers -m setup -a "filter=ansible_distribution*"

搜集和内存相关的信息

ansible webservers -m setup -a "filter=ansible_*_mb"

搜集和cpu相关的信息

ansible webservers -m setup -a "filter=ansible_processor*"

搜集网卡信息

ansible webservers -m setup -a "filter=ansible_eth*"
时间: 2024-08-25 11:32:25

Ansible 七(ad hoc任务)的相关文章

ansible常用ad hoc操作

ansible group001 -i hosts.ip -m shell -a "run some shell command" --sudo -f 1 -v

iOS开发最最基础之打包Ad Hoc应用

首先,介绍下什么是Ad Hoc? Ad Hoc简单的定义是:把iOS工程打包成ipa包后,通过Ad Hoc证书签名做分发测试的行为. Ad Hoc证书可以分为两类: 1.99美元的开发者账号生成的. 2.299美元的开发者账号生成的. 由于我没有299美元的开发者账号,故本文只针对99美元的开发者账号的情况作阐述. 接下来,我将从以下5点进行操作描述: 1.AppID(如果有配置好了,可以忽略). 2.certificate 3.device 4.profile 5.Xcode打包 1.AppI

ns3模拟无线Ad hoc 网络通信

Ad hoc网络 Ad hoc网是一种多跳的.无中心的.自组织无线网络,又称为多跳网(Multi-hop Network).无基础设施网(Infrastructureless Network)或自组织网(Self-organizing Network).整个网络没有固定的基础设施,每个节点都是移动的,并且都能以任意方式动态地保持与其它节点的联系.在这种网络中,由于终端无线覆盖取值范围的有限性,两个无法直接进行通信的用户终端可以借助其它节点进行分组转发.每一个节点同时是一个路由器,它们能完成发现以

iOS程序发布测试-生成ad hoc证书

转自: http://blog.sina.com.cn/s/blog_68444e230100srdn.html iOS程序发布测试3-生成ad hoc证书 iOS证书分2种,1种是开发证书,用来给你(开发人员)做真机测试的:1种是发布证书,发布证书又分发布到app store的(这里不提及)和发布测试的ad hoc证书. 那ad hoc证书和开发证书区别在哪里?如果你的tester(团队测试人员.客户)都能将测试设备拿到你面前,直接插到你的mac开发机上,你可以直接将程序"灌"进去,

解决SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问的方法

报错内容是:SQL  Server 阻止了对组件 'Ad Hoc Distributed Queries' 的  STATEMENT'OpenRowset/OpenDatasource'  的访问,因为此组件已作为此服务器安全配置的一部分而被关闭.系统管理员可以通过使用 sp_configure 启用 'Ad Hoc  Distributed Queries'.有关启用 'Ad Hoc Distributed Queries' 的详细信息,请参阅 SQL  Server 联机丛书中的 "外围应用

Ad Hoc Distributed Queries的启用与关闭

启用Ad Hoc Distributed Queries: exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure 关闭Ad Hoc Distributed Queries: exec sp_configure 'Ad Hoc Distributed Queries',0 reconfigure exec sp_conf

ios开发 ad hoc怎么用

简单的说就是这样 ad hoc 方式是苹果用来给未上线的app做测试用的,首先你要在苹果开发平台上申请一个ad hoc的证书,再在profile中生成一个ad hoc 的profile文件(只需要在生成的时候选中该证书就行),然后下载下来就可以了. ios中怎么生成adhoc描述文件 hypo421 | 浏览 338 次  2016-03-02 10:04 2016-03-02 10:47 最佳答案 ad hoc 方式是苹果用来给未上线的app做测试用的,首先你要在苹果开发平台上申请一个ad h

Optimize For Ad Hoc Workloads

--临时工作负载优化   即席查询:也就是查询完没放到Cache当中,每次查询都要重新经过编译,并发高的时候很耗性能: 参数化查询: 一方面解决了重编译问题,但随着数据库数据数据的变更,统计信息的更新,可能缓存里的缓存计划已经不是查询优化器想要的结果: Above  SQL server 2008: 第一次adhoc查询时候,cache会缓存一个存根的执行计划,本质上是一个300字节的标记,告诉SQLserver这个查询已经跑过了一次:如果使用默认值全部缓存计划最小大小为16KB: 那么问题来了

关于Ad Hoc发布的一点体会

项目中要用到推送因此之前的Wildcard App ID(通用AppID)就不能用了必须使用Explicit App ID.设置好AppID后我又创建了Provisioning Profile这次选择的时Ad Hoc如下图 将生成的profile下载双击安装到xcode中.然后Product->ArchiveArchive完成后出现以下界面 选择Export再出现的以下界面上选择"Save for Ad Hoc Deployment": 注意这里要特别说一下在以下界面用户需要选择