(二)ansible (常用模块commad,shell.script,copy),ansible-playbook命令

六. ansible常用模块

commad----远程执行

Command在远程主机执行命令,默认模块,可忽略-m选项
ansible srvs -m command -a ‘service vsftpd start’
ansible srvs -m command -a ‘echo magedu |passwd --stdin wang’
此命令不支持 $VARNAME < > | ; & 等,用shell模块实现
在这里插入图片描述
用chdir切换文件夹,之后执行命令

在这里插入图片描述
creates判断存在—存在不执行
在这里插入图片描述

shell

Shell:和command相似,用shell执行命令
支持| ,变量等

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

调用bash执行命令 类似 cat /tmp/stanley.md | awk -F‘|’ ‘{print $1,$2}’ &> /tmp/example.txt 这些复杂命令,

即使使用shell也可能会失败,解决办法:写到脚本时,copy到远程,执行,再把需要的结果拉回执行命令的机器
在这里插入图片描述
将shell模块改为默认模块module_name=shell方便与支持特殊符号

启动远程selinux,sed有专用模块
在这里插入图片描述

script----运行脚本

Script:在远程主机上运行ansible服务器上的脚本
逻辑——将ansible服务器的脚本拷贝到远程主机,执行,并且删除
-a "/PATH/TO/SCRIPT_FILE“

ansible websrvs -m script -a /data/f1.sh

写一个脚本hello.sh,加上执行权限,然后远程执行
ansible all -m script -a “/root/hello.sh”

copy

Copy:从主控端复制文件到远程主机
参数:
src源,
dest目的
owner属主
group属组
mode改权限
backup 是否备份
content= 生成文件内容 自定义文件,并拷贝

这里的srv是一组ansible控制的机器

ansible srv -m copy -a “src=/root/f1.sh dest=/tmp/f2.sh owner=wang mode=600 backup=yes”
如目标存在,默认覆盖,此处指定先备份

ansible srv -m copy -a “content=‘test content\n’ dest=/tmp/f1.txt”
指定内容,直接生成目标文件

fetch----从远程提取

fetch从远程主机提取文件至主控端copy相反,目前不支持目录
src是远程的文件
dest本机文件夹
最后会生成不同的文件—以ip区分
ansible srv -m fetch -a ‘src=/root/a.sh dest=/data/scripts’

file-----文件属性等

file:设置文件属性
state指定硬链接hard—或软连接link,
state=touch创建空文件
state=absent删除文件(要想删除一个目录中所有的文件—删除目录即可)
state=directory 创建文件夹
path 需要管理的文件
ansible srv -m file -a "path=/root/a.sh owner=wang mode=755“
ansible web -m file -a ‘src=/app/testfile dest=/app/testfile-link state=link

unarchive----压缩文件使用

unarchive:解包解压缩,有两种用法:
1、将ansible主机上的压缩包在本地解压缩后传到远程主机上,设置copy=yes.
2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no

常见参数:
copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如果设置为copy=no,会在远程主机上寻找src源文件
src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限
示例:
ansible srv -m unarchive -a ‘src=foo.tgz dest=/var/lib/foo’
ansible srv -m unarchive -a ‘src=/tmp/foo.zip dest=/data copy=no mode=0777’
ansible srv -m unarchive -a ‘src=https://example.com/example.zip dest=/data copy=no’’

用途
**可以自动化实现多台机的 二进制安装

其他

Archive:打包压缩

ansible all -m archive -a ‘path=/etc/sysconfig
dest=/data/sysconfig.tar.bz2 format=bz2 owner=wang mode=0777’

Hostname:管理主机名

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

Cron:计划任务

支持时间:minute,hour,day,month,weekday
创建计划任务–每5分钟同步一下时间

ansible srv -m cron -a “minute=*/5 job=‘/usr/sbin/ntpdate

172.16.0.1 &>/dev/null’ name=Synctime” 创建任务

禁用计划任务 —最后加上 disabled=true
删除计划任务 —最后加上 state=absent

ansible srv -m cron -a ‘state=absent name=Synctime’ 删除任务

yum:管理包— 对于redhat而言

ansible srv -m yum -a ‘name=httpd state=present’ 安装
ansible srv -m yum -a ‘name=httpd state=absent’ 删除

Service:管理服务

 ansible srv -m service -a ‘name=httpd state=stopped’
 ansible srv -m service -a ‘name=httpd state=started enabled=yes’ 开机自启动
 ansible srv -m service -a 'name=httpd state=reloaded’
 ansible srv -m service -a ‘name=httpd state=restarted’

    - name: Start zookeeper service
      service:
        name: zookeeper
        enabled: yes
        state: started

将httpd的监听端口改为8080
在这里插入图片描述

User:管理用户

创建用户,加注释,指定uid,家目录等
ansible srv -m user -a 'name=user1 comment=“test user” uid=2048 home=/app/user1 group=root‘

system=yes创建系统账户—create_home=no 不创建家目录
ansible srv -m user -a 'name=sysuser1 system=yes home=/app/sysuser1 ’

remove=yes将用户及家目录删除
state=absent只删除用户

ansible srv -m user -a ‘name=user1 state=absent remove=yes‘
删除用户及家目录等数据

Group:管理组

ansible srv -m group -a "name=testgroup system=yes“
ansible srv -m group -a "name=testgroup state=absent"

Lineinfile —修改文件内容

参考
ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,
存在问题,无法正常进行替换 。其实在ansible自身提供了两个模块:lineinfile模块和replace模块,可
以方便的进行替换
功能:相当于sed,可以修改文件内容

ansible websrvs -m   lineinfile -a "path=/etc/httpd/conf/httpd.conf 
regexp='^Listen' line='Listen 80'"
ansible all -m   lineinfile -a "path=/etc/selinux/config regexp='^SELINUX=' 
line='SELINUX=disabled'"
ansible all -m lineinfile  -a 'dest=/etc/fstab state=absent regexp="^#"'

Replace —相当于sed修改文件内容

该模块有点类似于sed命令,主要也是基于正则进行匹配和替换,建议使用

ansible all -m replace -a "path=/etc/fstab regexp='^(UUID.*)' replace='#\1'"  
ansible all -m replace -a "path=/etc/fstab regexp='^#(.*)' replace='\1'"

Setup —手机主机信息

功能: setup 模块来收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度,可以使用 gather_facts: no 来禁止 Ansible 收集 facts 信息

ansible all -m setup
ansible all -m setup -a "filter=ansible_nodename"
ansible all -m setup -a "filter=ansible_hostname"
ansible all -m setup -a "filter=ansible_domain"
ansible all -m setup -a "filter=ansible_memtotal_mb"
ansible all -m setup -a "filter=ansible_memory_mb"
ansible all -m setup -a "filter=ansible_memfree_mb"
ansible all -m setup -a "filter=ansible_os_family"
ansible all -m setup -a "filter=ansible_distribution_major_version"
ansible all -m setup -a "filter=ansible_distribution_version"
ansible all -m setup -a "filter=ansible_processor_vcpus"
ansible all -m setup -a "filter=ansible_all_ipv4_addresses"
ansible all -m setup -a "filter=ansible_architecture"
ansible all -m setup -a "filter=ansible_processor*"

[root@ansible ~]#ansible all -m setup -a 'filter=ansible_python_version'
10.0.0.7 | SUCCESS => {
    "ansible_facts": {
        "ansible_python_version": "2.7.5",
        "discovered_interpreter_python": "/usr/bin/python"
   },
    "changed": false
}
10.0.0.6 | SUCCESS => {
    "ansible_facts": {
        "ansible_python_version": "2.6.6",
        "discovered_interpreter_python": "/usr/bin/python"
   },
    "changed": false
}
10.0.0.8 | SUCCESS => {
    "ansible_facts": {
        "ansible_python_version": "3.6.8",
        "discovered_interpreter_python": "/usr/libexec/platform-python"
   },
    "changed": false
}
#取所有IP
ansible 10.0.0.101 -m setup -a 'filter=ansible_all_ipv4_addresses'
10.0.0.101 | SUCCESS => {
   "ansible_facts": {
       "ansible_all_ipv4_addresses": [
            "192.168.0.1",
            "192.168.0.2",
            "192.168.64.238",
            "192.168.13.36",
            "10.0.0.101",
            "172.16.1.0",
            "172.17.0.1"
        ]
    },
   "changed": false
}


#取默认IP
ansible all -m setup -a 'filter="ansible_default_ipv4"'
10.0.0.101 | SUCCESS => {
   "ansible_facts": {
       "ansible_default_ipv4": {
           "address": "10.0.0.101",
           "alias": "eth0",
           "broadcast": "10.0.0.255",
           "gateway": "10.0.0.2",
           "interface": "eth0",
           "macaddress": "00:0c:29:e8:c7:9b",
           "mtu": 1500,
           "netmask": "255.255.255.0",
           "network": "10.0.0.0",
           "type": "ether"
        }
    },
   "changed": false
}

debug输出信息

吧信息输出到ansible的控制台上,用于定位问题
通常与register连用
在这里插入图片描述
在这里插入图片描述
还可以输出变量
在这里插入图片描述
在这里插入图片描述

register 返回值

ansible执行之后都有一些返回值,只是不显示
register将返回值放到指定的变量中
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

prompt—交互输入

提示用户输入信息,将用户输入的信息存在指定的变量中,如果需要用时,只需要引用变量就可以

输入不显示
在这里插入图片描述
在这里插入图片描述
例如:输入,回显
在这里插入图片描述
在这里插入图片描述
也可以设置输入时的默认值
在这里插入图片描述
在这里插入图片描述

例如debug+register

七. ansible系列命令

  tasks:
    - name: Check Idle port for zookeeper
      shell: ss -ntl | grep -e {{ listen_port }} -e {{ port2 }}
      ignore_errors: True
      register: zoo

    - name: WARN for port check
      debug:
        msg: "WARNING Port {{ listen_port }} or {{ port2 }} is not idle, Service zookeeper will not be deploy"
      when: zoo is succeeded


    - name: Copy download zookeeper pkgs in all hosts
      copy: src={{package_path}}/zookeeper/zookeeper.rpm dest=/tmp/
      when: zoo is failed

    - name: yum install zookeeper rpm
      shell: 'yum localinstall /tmp/zookeeper.rpm -y'
      when: zoo is failed

ansible-galaxy

连接 https://galaxy.ansible.com 下载相应的roles

列出所有已安装的galaxy
ansible-galaxy list
安装galaxy
ansible-galaxy install geerlingguy.redis
删除galaxy
ansible-galaxy remove geerlingguy.redis

ansible-pull

推送命令至远程,效率无限提升,对运维要求较高

ansible-playbook

执行playbook
示例:ansible-playbook hello.yml

cat hello.yml
#hello world yml file
- hosts: websrvs    #针对那些主机设置
remote_user: root	#以谁的身份
tasks:
	- name: hello world
	command: /usr/bin/wall hello world  

ansible-vault 加密

功能:管理加密解密yml文件
ansible-vault [create|decrypt|edit|encrypt|rekey|view]
ansible-vault encrypt hello.yml 加密
ansible-vault decrypt hello.yml 解密
ansible-vault view hello.yml 查看
ansible-vault edit hello.yml 编辑加密文件
ansible-vault rekey hello.yml 修改口令
ansible-vault create new.yml 创建新文件

Ansible-console 交互执行

可交互执行命令,支持tab
root@test (2)[f:10] $
执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$

设置并发数: forks n 例如: forks 10

切换组: cd 主机组 例如: cd web

列出当前组主机列表: list

列出所有的内置命令: ?或help
示例:
root@all (2)[f:5]$ list
root@all (2)[f:5]$ cd appsrvs
root@appsrvs (2)[f:5]$ list
root@appsrvs (2)[f:5]$ yum name=httpd state=present
root@appsrvs (2)[f:5]$ service name=httpd state=started

在所有主机上执行(3台),可以使5个进程并发执行
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值