Ansible命令

ansible命令语法
  1. 语法:ansible <host-pattern> [options]
  2. 选项参数:
  3. 使用ansible --help可以查看到命令参数
  4. 这里只写一些常用的参数:
  5. --version #显示版本
  6. -m module #指定使用的模块,默认为command
  7. -v #查看执行的详细过程(-vv、-vvv更详细)
  8. --list-hosts #显示主机列表(可以简写为--list)
  9. -k,--ask-pass #提示输入ssh连接密码,默认使用key验证
  10. -K,--ask-become-pass #提示执行输入sudo的密码
  11. -C,--check #检查,并不执行
  12. -T,--timeout=TIMEOUT #执行命令的超时时间,默认10s
  13. -u,--user=REMOTE_USER #指定远程执行的执行用户
  14. -b,--become #代替旧版本的sudo切换
  15. -h,--help #显示使用帮助

ansible-doc

ansible-doc显示模块帮助,针对每个模块都有详细的用法说明,功能和Linux的man命令类似。

语法:ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
参数:
-a, --all                                   #显示文档所有的模块(这个选项有个bug)
-h, --help                                  #显示使用帮助
-j, --json                                  #将所有的模块转储为JSON格式
-l, --list                                  #查看模块列表
-F, --list_files                            #显示模块的名称和模块原路径
-M MODULE_PATH, --module-path=MODULE_PATH   #
-s, --snippet                               #简介的显示模块的帮助信息
-t TYPE, --type=TYPE                        #指定模块类型(默认为module)
-v, --verbose                               #查看执行的详细过程(-vv、-vvvv更详细)
--version                                   #查看版本

常用模块

常用模块使用的inventory列表如下

$ vim ./host/ocip
#前置
[qianzhi1]
10.21.17.195

#联机
[online1]
10.21.17.203

#管理
[houguan1]
10.21.17.206

[ocip:children]
qianzhi1
online1
houguan1

[all:vars]
ansible_ssh_user='app'
ansible_ssh_pass='12345'
ansible_su_pass='uiop7890'

ping模块

ping模块用来测试远程主机连通性

[root@VM_16_182_centos dep_test]# ansible all -m ping
10.21.17.203 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
10.21.17.206 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
10.21.17.195 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

command模块

command模块用来在远程主机上执行命令,并将结果返回本主机。为默认模块,可忽略-m选项

$ ansible qianzhi1 -m command -a 'ls /data'
10.21.17.195 | SUCCESS | rc=0 >>
agent
app
lost+found
$ ansible qianzhiq -m command -a 'echo P@ssw0rd | passwd --stdin app'

注意:

  • ansible对单引号和双引号敏感,推荐使用单引号

  • command模块不支持$VARNAME < > | ; &等。

shell模块

和command相似,调用shell模块执行命令

$ ansible qianzhiq -m shell -a 'echo P@ssw0rd | passwd --stdin app'

调用bash执行命令,但类似cat /tmp/stanley.md | awk -F ‘|’ ‘{print $1,$2}’ &> /dev/null这些复杂命令,即使使用shell也可能失败,解决办法是写到脚本中,调用script模块执行脚本

同时也支持一下参数:

- name: Execute commands in nodes.
  action: shell
      chdir                  # 切换目录相当于cd命令
      creates                # 如果creates后的文件已经存在,则后面的命令则忽略
      executable             # 更改用于执行命令的shell。应该是可执行文件的绝对路径。
      free_form=             # 要执行的linux指令
      removes                # 如果removes后的文件不存在,则后面的命令则忽略
# 示例
$ ansible qianzhi1 -m shell -a "chdir=/data ls"
10.21.17.195 | SUCCESS | rc=0 >>
agent
app
lost+found

script模块

在目标服务器上运行本地存在的脚本。

$ ansible qianzhi1 -m script -a f1.sh

copy模块

主要用于将管理主机上的数据信息传送给多台主机

# ansible-doc -s copy
- name: Copies files to remote locations.
  action: copy
      backup     # 默认数据复制到远程主机,会覆盖原有文件(yes 将源文件进行备份)             
      content      # 在文件中添加信息          
      dest      # 将数据复制到远程节点的路径信息                                 
      group   # 文件数据复制到远程主机,设置文件属组用户信息               
      mode   # 文件数据复制到远程主机,设置数据的权限 eg 0644 0755                              
      owner     # 文件数据复制到远程主机,设置文件属主用户信息              
      remote_src    # 如果设置为yes,表示将远程主机上的数据进行移动操作如果设置为no, 表示将管理主机上的数据进行分发操作                          
      src    # 指定将本地管理主机的什么数据信息进行远程复制
  • 示例:
$ ansible qianzhi1 -m copy -a "src=./anaconda-ks.cfg  dest=/data owner=www group=www mode=0644 backup=yes"

fetch模块

从目标机器获取文件至服务端,与copy相反

$ ansible-doc -s fetch
- name: Fetches a file from remote nodes
  action: fetch
      dest  # 这里的dest为服务端目录,会在指定目录下生成目标主机的目录结构
      flat                  
      src   # 指定目标主机需要copy的文件,注意只能为文件,不可为目录
      validate_checksum  # md5检查
  • 示例:
$ ansible all -m fetch -a "src=/data/app/app/test.txt dest=/root/deploy_sprod/dep_test/logs/"

tree logs/
logs/
├── 10.21.17.195
│   ├── data
│   │   └── app
│   │       └── app
│   │           └── test.txt
│   └── var
│       └── log
├── 10.21.17.203
│   ├── data
│   │   └── app
│   │       └── app
│   │           └── test.txt
│   └── var
│       └── log
└── 10.21.17.206
    ├── data
    │   └── app
    │       └── app
    │           └── test.txt
    └── var
        └── log

file模块

实现创建/删除文件信息 对数据权限进行修改

$ ansible-doc -s file
- name: Sets attributes of files
  action: file               
      group   # 文件数据复制到远程主机,设置文件属组用户信息             
      mode   # 文件数据复制到远程主机,设置数据的权限 eg 0644 0755                       
      owner  # 文件数据复制到远程主机,设置文件属主用户信息              
      path # 将数据复制到远程节点的路径信息                            
      src   # 指定将本地管理主机的什么数据信息进行远程复制               
      state   # 执行的动作

state包含以下动作:

  • absent:将数据进行删除
  • directory:创建一个空目录信息
  • file:查看指定目录信息是否存在
  • touch:创建一个空文件信息
  • hard/link:创建链接文件

cron模块

定时任务模块

$ ansible-doc -s cron
- name: Manage cron.d and crontab entries.
  action: cron
      minute/hour/day/month/weekday   # 和设置时间信息相关参数        
      job    # 和设置定时任务相关参数                        
      name   #  设置定时任务名称                
      disabled  #将指定定时任务进行注释
  • 示例
$ ansible all -m cron -a 'minute=*/2 job="/usr/bin/wall test ansible cron" name=ansiblecron'
10.21.17.195 | SUCCESS => {
    "changed": true, 
    "envs": [], 
    "jobs": [
        "ansiblecron"
    ]
}
# 目标主机上会生成一条crontab
$ crontab -e
#Ansible: ansiblecron
*/2 * * * * /usr/bin/wall test ansible cron

# 禁用crontab
$ ansible all -m cron -a 'disabled=true job="/usr/bin/wall test ansible cron" name=ansiblecron'

yum模块

使用yum包管理器来安装管理目标主机软件包

ansible-doc -s yum
- name: Manages packages with the `yum' package manager
  config_file   # 指定yum的配置文件
  disable_gpg_check   # 关闭gpg检测
  disablerepo   # 禁用某个yum源
  enablerepo   # 启用某个yum源
  list  # 相当于yum list
  state  # 指定动作(present,latest、absent)
  • 示例:使用yum安装httpd
$ ansible all -m yum -a "name=httpd state=installed"
$ ansible all -m yum -a "name=httpd state=absent"

service模块

用来管理目标主机的服务

$ ansible-doc -s service
- name: Manage services.
  enabled  # 设置开机启动,enabled和state至少有一个要定义
  name  # service名称
  pattern   # 如果服务没有响应,则ps查看是否具有指定参数的进程,有则认为服务已经启动
  state  # started,stopped,restarted,reloaded。service最终操作后的状态
  • 示例:启动服务,并设置为开机启动
$ ansible all -m service -a "name=httpd state=started enabled=yes"

user模块

用于管理目标主机的用户

$ ansible-doc -s user
- name: Manage user accounts
  name  # 指定用户名称
  shell  # 指定用户默认shell
  system  # 当创建的用户state=present时,会设置为系统用户,现有用户无法更改词设置
  home   # 指定用户家目录
  groups  # 指定用户的属组
  uid  # 指定用户uid
  remove  # 删除用户
  profile   # 指定用户配置文件
  passwd  # 设置用户密码,此密码必须为加密字符串
  force  # 如果state=absent,设置此值相当于使用userdel --force
  comment  # 设置描述信息
  • 示例:创建用户
$ ansible all -m user -a "name=app password=uiop7890 shell=/bin/bash home=/data/app/"
192.168.10.10 | SUCCESS => {
    "changed": true,
    "comment": "",
    "createhome": true,
    "group": 1000,
    "home": "/data/app/",
    "name": "app",
    "password": "NOT_LOGGING_PASSWORD",
    "shell": "/bin/bash",
    "state": "present",
    "system": false,
    "uid": 1000
}

group模块

用于管理目标主机组

ansible-doc -s group
- name: Add or remove groups
  group:
      gid:                   # 设置gid
      name:                  # 必选,设置组名
      state:                 # present or absent,设置动作
      system:                # 如果设置为yes,则创建为系统组
  • 示例:创建组
ansible all -m group -a "name=app system=yes state=present"
192.168.10.10 | SUCCESS => {
    "changed": false,
    "gid": 1000,
    "name": "app",
    "state": "present",
    "system": true
}