不求甚解

此博客为个人学习之用,如与其他作品雷同,纯属巧合。

导航

Ansible之一module

Posted on 2021-01-29 12:06  三年三班王小朋  阅读(120)  评论(0编辑  收藏  举报

常用自动化运维工具

Ansible:python,Agentless,中小型应用环境

saltstack:python,一般需部署agent,执行效率更高

puppet:ruby,功能强大,配置复杂,重型适合大型环境

fabric:python,agentless  Chef:ruby,国内应用少   Cfengine  func

 

 

 

Ansible 主要组成部分

Ansible命令执行来源:1USER 2USER->Ansible Playbook->Ansible 3CMDB 4PUBLIC/PRIVATE CLOUD 

Ansible-playbook(剧本)执行过程:

将已有编排好的任务集写入Ansible-Playbook

通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行

ansible主要操作对象:1、hosts主机 2、NETWORKING网络设备

相关文件

配置文件

/etc/ansible/ansible.cfg  主配置文件。配置ansible工作特性

/etc/ansible/hosts  主机清单

/etc/ansible/roles  存放角色的目录

程序

/usr/bin/ansible  主程序,临时命令执行工具

/usr/bin/ansible-doc  查看配置文档,模块功能查看工具

/usr/bin/ansible-galaxy  下载/上传优秀代码或roles模块的官网平台

/usr/bing/ansible-playbook 定制自动化任务,编排工具

/usr/bin/ansible-pull  远程执行命令的工具

/usr/bin/ansible-vault  文件加密工具

/usr/bin/ansible-console  基于console界面与用户交互的执行工具

主机清单invenstory

/etc/ansible/hosts文件格式

inventory文件遵循INI文件风格,中括号中的字符为组名,可以将同一个主机同时归并到多个不同的组中;此外如若目标主机使用非默认ssh端口,还可以在主机名之后使用冒号加端口号来标明

ntp.magedu.com

[webservers]

www1.magedu.com:2222

www2.magedu.com

[dbservers]

db1.magedu.com

db2.magedu.com

db3.magedu.com

ansible配置文件

Ansible配置文件/etc/ansible/ansible.cfg(一般保持默认)

[defaults]

#inventory  =  /etc/ansible/hosts  #主机列表配置文件

#library  =  /usr/share/my_modules/  #库文件存放目录

#remote_tmp  =  $HOME/.ansible/tmp  #临时py命令文件存放在远程主机目录

#local_tmp  =  $HOME/.ansible/tmp  #本机的临时命令执行目录

#forks    =  5  #默认并发数

#sudo_user   =  root #默认sudo 用户

#ask_sudo_pass  = True  #每次执行ansible命令是否询问ssh密码

#ask_pass  =  True

#remote_port   =  22

#host_key_checking =False  # 检查对应服务器的host_key,建议取消注释

#log_path=/var/log/ansible.log  #日志文件     

ansible系列命令

Ansible系列命令:

ansible  ansible-doc  ansible-playbook  ansible-vault  snsible-console  ansible-galaxy  ansible-pull

ansible-doc:显示模块帮助

ansible-doc[options][module...]  -a  所有模块文档  -l,--list  可用模块  -s  显示指定模块playbook片段

ansible通过ssh实现配置管理、应用部署、任务执行等功能,建议配置ansible端能基于密钥认证的方式联系各个被管理站点

ansible <host-pattern> [-m module_name] [-a args]

--version 显示版本

-m module 指定模块,默认为command

-v 详细过程 -vv -vvv更详细

--list-hosts  显示主机列表,可见写--list

-k, --ask-pass  提示输入ssh连接密码,默认Key验证

-K, --ask-become-pass 提示输入sudo时的口令

-C, --check  检查,并不执行

-T, --timeout=TIMEOUT 执行命令的超市时间,默认10s

-u, --user=REMOUTE_USER 执行远程执行的用户

-b, --become  代替旧版的sudo 切换

ansible 192.168.0.31 -u zhimai -k -a 'ls /var/'

 

 ssh-keygen创建公钥-私钥对

-t: 密钥类型, 可以选择 dsa | ecdsa | ed25519 | rsa;

-f: 密钥目录位置, 默认为当前用户home路径下的.ssh隐藏目录, 也就是~/.ssh/, 同时默认密钥文件名以id_rsa开头. 如果是root用户, 则在/root/.ssh/id_rsa, 若为其他用户, 则在/home/username/.ssh/id_rsa;

-C: 指定此密钥的备注信息, 需要配置多个免密登录时, 建议携带;

-N: 指定此密钥对的密码, 如果指定此参数, 则命令执行过程中就不会出现交互确认密码的信息了.

ssh-copy-id把A的公钥发送给B

ssh-copy-id root@172.16.22.132

# 指定要拷贝的本地文件、远程主机的IP+用户名+端口号:

ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 root@172.16.22.132

ansible的Host-pattern 匹配主机的列表

All:表示所有Inventory中的所有主机   ansible all -m ping

*    通配符   

ansible  “*”  -m  ping

ansible  192.168.1.* -m ping

ansible  "srvs"  -m  ping

 

逻辑或

ansible  "webserver:appserver"  -m  ping

ansible  “192.168.1.10192.168.1.20”    -m  ping

 

逻辑与

ansible    “websrvs:&dbsrvs”    -m   ping

 

在websrvs 组并且在dbsrs组中的主机

逻辑非

ansible  ‘websrvs:!dbsrvs’   -m   ping

 

在websrvs组,但不再dbsrvs组中的主机

注意:此处为单引号

综合逻辑

ansible    ‘websrvs:dbsrvs:&appsrvs’    -m  ping

 

正则表达式

ansible    “~(web|db).*\.magedu\.com  ”    -m   ping

 

ansible命令执行过程

1、加载自己的配置文件  默认/etc/ansible/ansible.cfg

2、加载自己对应的模块文件,如command

3、通过ansible 将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件

4、给文件+x执行

5、执行并返回结果

6、删除临时py文件,sleep 0 退出

执行状态:

绿色:执行成功并且不需要做改变的操作

黄色:执行成功并且需要对目标主机做变更

红色:执行失败

ansible使用示例

示例 以wang用户执行ping存活检测 

ansible  all  -m  ping  -u  wang  -k

以wang sudo 至root 执行ping存活检测

ansible all -m ping -u wang -b -k

以wang sudo至mage用户执行ping存活检测

ansible all -m ping -u wang -b -k --become-user mage

以wang sudo 至root 用户执行ls

ansible all -m command -u wang --become-user=root -a ‘ls /root’ -b  -k  -K

Ansible常用模块

Command:在远程主机执行命令,默认模块,可忽略-m选项

ansible srvs -m command -a ‘service vsftpd start’

ansible srvs -m command -a ‘echo magedu|passwd --stdin wang’不成功

此命令不支持4VARNAME<>|;&等,用shell模块实现

Shell:和command相似,用shell执行命令

ansible srv -m shell -a ‘echo magedu|passwd --stdin wang’

调用bash执行命令 类似 cat/tmp/stanley。md | awk -F‘|' {pring $1 ,$2}'>/tmp/exanple.txt 这些复杂命令,即使使用shell也可能会失败,解决办法:写道脚本时,copy到元辰,执行,再把需要的结果拉回执行命令的机器

Script:运行脚本

-a “/PATH/TO/SCROPT_FILE”

ansible websvrs -m script -a f1.sh

Copy:从服务器复制文件到客户端,

ansible scr -m copy -a "scr=/root/f1.sh dest=/tmp/f2.sh backup=yes"

如果目标存在,默认覆盖,此处指定先备份

ansible scr -m copy -a "content=‘test content\n' dest=/tmp/f1.txt“ 

利用内容直接生成目标文件

Fetch:从客户端取文件至服务器端,copy相反,目录可先tar

ansible srv -m fetch -a ’src=/root/a.sh dest=/data/scripts‘

File:设置文件属性

ansible srv -m file -a ”path=/root/a.sh ower=wang mode=755“
ansible web -m file -a ’src=/app/testfile dest=/app/testfile-link state=link‘ 

 Hostname:管理主机名

ansible node1-m hostname -a “name=websrv ”

Cron:计划任务

支持时间:minute,hour,day,month,weekday

ansible all -m cron -a 'minute=* weekday=1,3,5 job="/usr/bin/wall FBIwarning" name=warningcron' 

ansible all -m cron -a 'disable-true job="/usr/bin/wall FBIwarning" name=warningcron' #禁用

  ansible all -m cron -a 'job="/usr/bin/wall FBIwarning" name=warningcron state=absent'        #删除

 Yum:管理包

ansible 192.168.0.31 -m yum -a 'name=vsftpd,memcached state=absent disable_gpg_check=yes'        #卸载

  ansible 192.168.0.31 -m yum -a 'name=vsftpd,memcached'        #安装

 Service:管理服务

ansible 192.168.0.31 -m service -a 'name=nginx state=stopped enabled=yes'

 

User:管理用户

ansible srv -m user -a ‘name=user1 comment=“test user” uid=2048 home=/app/user1 group=root’

ansible srv -m user -a ‘name=use system=yes home=/app/sysuser’

ansible srv -m user -a ‘name=use state=absent remove=yes‘

 

Group:管理组

ansible srv -m group -a ‘name=testgroup system=yes ’
ansible srv -m group -a ‘name=testgroup state=absent ’