常用自动化运维工具

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.10:192.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 ’

Ansible之一module的更多相关文章

  1. Ansible develop module

    def cnf(action,configs,path): message = "Modify %s\n" %path changed = False if action == & ...

  2. Ansible Notes: module: get_facts

    功能:用来获取remote host的facts 它是一个非常基础的模块[1],playbook里面可以直接当关键字用gather_facts: False 执行set_up模块时自动调用get_fa ...

  3. ansible服务模块和组模块使用

    本篇文章主要是介绍ansible服务模块和组模块的使用. 主要模块为ansible service module和ansible group moudle,下面的内容均是通过实践得到,可以直接运行相关 ...

  4. ansible基础-安装与配置

    一 安装 1.1 ansible架构 ansible是一个非常简单的自动化部署项目,由python编写并且开源.用于提供自动化云配置.配置文件管理.应用部署.服务编排和很多其他的IT自动化需求. an ...

  5. Gitlab_ansible_jenkins三剑客③Ansible的安装及使用

    一台服务器可能会安装不同的python应用,不同的应用可能使用的模块版本不同,如果都安装在同样的环境下容易冲突,为了避免冲突,引入virtualenv 这个包管理工具进行环境的隔离 使用pip安装之前 ...

  6. Ansible安装部署以及常用模块详解

    一.  Ansible 介绍Ansible是一个配置管理系统configuration management system, python 语言是运维人员必须会的语言, ansible 是一个基于py ...

  7. 【原创】运维基础之Ansible(1)简介、安装和使用

    官方:https://www.ansible.com/ 一 简介 Ansible is a radically simple IT automation engine that automates c ...

  8. 轻量级集群管理软件-Ansible

    ansible概述和运行机制 ansible概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具,  它用Python写成,类似于saltstack和Puppet,但是有一个不同 ...

  9. Ansible 安装与配置(一)

    公司大概有200多云主机需要进行管理,但是如果通过手工管理费时还累最终结果也容易出错,所以考虑通过自动化的方式来管理云主机,目前开源的自动化工具,大家用的比较多的有Ansible和Saltstack这 ...

  10. ansible简介,简单实用

    Ansible ansilbe是实现自动化运维的工具,基于python开发,实现批量系统配置,批量程序部署,批量运行命令等功能. ansible是基于模块工作的,自身是没有批量部署的能力.真正具有批量 ...

随机推荐

  1. 结合反射与 XML 实现 Java 编程的动态性

    反射是 Java 语言被视为动态或准动态语言的一个关键性质,结合反射和 XML 会帮助我们更快.更方便地实现一些动态代码,从而解决编程中可能遇到的不确定问题.本文将结合反射与 XML 对 Java 编 ...

  2. jQuery 元素信息

    先贴出元素模型信息 1.获取内容区大小 css():返回值是带单位的(getComputedStyle(node).width) <script> $(function(){ consol ...

  3. css var实现网页换肤

    前情 最近在做需求开发,要求根据后台传来的配置对网页换肤,按以往的换肤思路应该是写好几套样式做切换达到换肤效果,但是现在想做到能根据后台配置动态修改. 原理 通过css3新增变量特性,把颜色定义为变量 ...

  4. PCB设计AD规则设置(按照嘉立创设置)

    本文转载自https://blog.csdn.net/subtitle_/article/details/121648972 官方参考https://www.jlc.com/portal/vtechn ...

  5. 常回家看看之Tcache Stashing Unlink Attack

    前言: 在开始了解这个攻击手法的前提,需要先了解一个函数也就是calloc函数,众所周知,当libc版本大于等于2.27的时候会引入tcachebin,而Tcache Stashing Unlink ...

  6. Visual Studio C++ 汇编 混合编程

    Visual Studio C++ 汇编 混合编程 实验要求 请用汇编语言编写实现GCD递推公式的子程序,对入口和出口参数形式不做要求,但需要用 C 语言函数来获取输入.调用汇编递推子程序,并且用 C ...

  7. Microsoft Build 2022 专家对话

    Microsoft Build 2022 专家对话 Build 2022 专家对话地址:https://mybuild.microsoft.com/en-US/sessions/81056450-6f ...

  8. JDK 18 最新动态和 JDK 19 新特性预测

    JDK 18 最新动态和 JDK 19 新特性预测_语言 & 开发_Michael Redlich_InfoQ精选文章 里面提到文章 定界延续(delimited continuations) ...

  9. 如何在Linux上使用pbcopy和pbpaste命令

    由于 Linux 和 Mac OS X 是基于 *Nix 的系统,因此许多命令可以在两个平台上运行.但是,某些命令可能在两个平台上都没有,比如 pbcopy 和 pbpast.这些命令仅在 Mac O ...

  10. 加入security+jwt安全策略

    Pom中引入 <!-- security --> <dependency> <groupId>org.springframework.boot</groupI ...