Ansible 常用命令行(Ad-Hoc)
简介
Ansible 提供两种方式去完成任务,一是 ad-hoc 命令,一是写 Ansible playbook。前者可以解决一些简单的任务,后者解决较复杂的任务。
如果我们敲入一些命令去比较快的完成一些事情,而不需要将这些执行的命令特别保存下来,这样的命令就叫做 ad-hoc 命令。
这其实是一个概念性的名字,是相对于写 Ansible playbook 来说的。类似于在命令行敲入 shell 命令和写 shell scripts 两者之间的关系。
并行度和 Shell 命令
执行如下命令,这个命令中,monitored_servers 是一个组,这个组里面有所有被监控的服务器,“whoami” 命令会在 monitored_servers 组下的所有机器上执行。这里 ssh-agent 会 fork 出 10 个子进程 (bash) ,以并行的方式执行 whoami 命令。
ansible -i inventory.ini monitored_servers -m shell -a "whoami" -f 10
在前面写出的命令中,-f 10 选项表示使用10个并行的进程。这个选项也可以在 Ansible 的配置文件中设置,在配置文件中指定的话,就不用在命令行中写出了。这个选项的默认值是 5,是比较小的。
在执行 ansible 时,默认是以当前用户的身份去执行这个命令。如果想以指定的用户执行 ansible,请添加 “-u username” 选项,如下
ansible -i inventory.ini monitored_servers -m shell -a "whoami" -u tidb
使用 Ansible ad hoc 命令行接口时,尤其注意 shell 引号的规则。 比如在下面的例子中,如果使用双引号 ”$HOSTNAME”,会求出 HOSTNAME 变量在当前系统的值,而我们实际希望的是把这个命令传递到其它机器执行。
ansible -i inventory.ini monitored_servers -m shell -a 'echo $HOSTNAME'
ansible -i inventory.ini monitored_servers -m shell -a "echo $HOSTNAME"
搜索多台服务器的日志
ansible -i inventory.ini tidb_servers -m shell -a "cat {{deploy_dir}}/log/tidb.log | grep Welcome"
文件传输
这是 ansible 的另一种用法。Ansible 能够以并行的方式同时 SCP 大量的文件到多台机器。 命令如下
ansible -i inventory.ini monitored_servers -m copy -a "src=/etc/hosts dest=/tmp/hosts"
使用 file 模块可以做到修改文件的属主和权限,在这里可替换为 copy 模块,是等效的
ansible -i inventory.ini monitored_servers -m file -a "dest=.../tidb-ansible/resource/bin/pd-ctl mode=600 owner=tidb group=tidb"
使用 file 模块也可以创建目录,与执行 mkdir -p 效果类似
ansible -i inventory.ini monitored_servers -m file -a "dest=.../deploy mode=755 owner=tidb group=tidb state=directory"
删除目录(递归的删除)和删除文件
ansible -i inventory.ini monitored_servers -m file -a "dest=.../deploy state=absent"
拉取文件回本地
ansible -i inventory.ini tikv_servers -m fetch -a "src={{deploy_dir}}/log/tikv.log dest=/tmp/tikv_log/"
当 dest 后缀不为 / 的时,那么就会直接保存为目标文件
如果 dest 的后缀名为 /,那么就会保存在此目录中
包管理
指定版本安装包
ansible -i inventory.ini monitored_servers -m yum -a "name=python2.7 state=present"
指定 rpm 包来安装
ansible -i inventory.ini monitored_servers -m yum -a "name=/usr/local/src/kel.noarch.rpm state=present"
用户管理
使用 ‘user’ 模块可以方便的创建账户,删除账户,或是管理现有的账户。
添加用户foo,指定密码,设置家目录,不允许远程登录。
ansible -i inventory.ini monitored_servers -m user -a "name=foo password=123456 home=/home/foo shell=/sbin/nologin"
彻底删除一个用户,包括家目录。
ansible -i inventory.ini monitored_servers -m user -a "name=foo remove=yes state=absent"
服务管理
在服务器上启动某个服务
ansible -i inventory.ini tikv_servers -m service -a "name=tikv-{{tikv_port}}.service state=started"
或是在服务器上重启某个服务
ansible -i inventory.ini tikv_servers -m service -a "name=tikv-{{tikv_port}}.service state=restarted"
设置服务为开机启动
ansible -i inventory.ini tikv_servers -m service -a "name=ntp enabled=yes"
搜集主机的所有系统信息
搜集主机的所有系统信息
ansible -i inventory.ini monitored_servers -m setup
搜集系统信息并以主机名为文件名分别保存在/tmp/facts 目录
ansible -i inventory.ini monitored_servers -m setup --tree /tmp/facts
搜集 cpu 信息
ansible -i inventory.ini monitored_servers -m setup -a 'filter=ansible_processor_*'