设为首页 收藏本站
查看: 1001|回复: 0

[经验分享] ansible基础一

[复制链接]

尚未签到

发表于 2018-7-29 07:13:37 | 显示全部楼层 |阅读模式
  在管理机器上安装ansible工具
  yum  install ansible
  将需要管理的主机加入absible,的主机管理清单配置文件/etc/ansible/hosts
  格式:inventory文件遵循INI文件风格,中括号中的字符为组名。 可以将同一个主机同时归并到多个不同的组中;此外,当如若 目标主机使用了非默认的SSH端口,还可以在主机名称之后 使用冒号加端口号来标明
  1)不分组方式#不推荐这样使用
  192.168.136.5:2222  #冒号后面的2222表示端口号
  192.168.136.6
  2)分组方式
  [web]   # web表示组名,分组以后可以直接通过组名来进行管理组里面的主机
  192.168.136.5
  192.168.136.6
  [opt]
  192.168.136.[7:10]   #这表示范围,从192.168.136.7到192.168.136.10之间的所有主机
  [webservers]
  www1.magedu.com
  www2.magedu.com
  ansible管理主机一般最好是先基于key验证之后管理起来会比较方便
  步骤:
  1)生成公私钥对
  ssh-keygen
  2)将公钥复制到所有主机
  可以编写脚本:完成这一步
  也可以用ssh-copy-id  <主机ip>即可
  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    #会把你执行的命令生成日志计入在/var/log/ansible.log文件中,建议把这一项启用起来,
  ansible
  功能介绍
  基于模块化,远程管理主机,并且是基于ssh方式连接主机的方式,安全性高
  格式
  <host-pattern> [-m module_name] [-a args]
  特点
  1)模块化:调用特定的模块,完成特定任务
  2)有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
  3)支持自定义模块
  4)基于Python语言实现
  5)部署简单,基于python和SSH(默认已安装),agentless
  6)安全,基于OpenSSH
  7)支持playbook编排任务
  8)幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
  9)无需代理不依赖PKI(无需ssl)
  10)可使用任何编程语言写模块
  11)YAML格式,编排任务,支持丰富的数据结构
  12)较强大的多层解决方案
  ansable系列命令
  ansible
  ansible-doc
  ansible-playbook
  ansible-vault
  ansible-console
  ansible-galaxy
  ansible-pull
  ansible-doc 查看模
  块帮助用法
  ansible-doc –l  列出所有模块
  ansible-doc ping  查看指定模块帮助用法
  ansible-doc –s  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退出
  执行状态:
  绿色:执行成功并且不需要做改变的操作
  黄色:执行成功并且对目标主机做变更
  红色:执行失败
  选项
  说明
  --version
  显示版本
  -m module
  指定模块,默认为command
  -v
  详细过程 –vv  -vvv更详细
  --list-hosts
  显示主机列表,可简写—list
  --ask-pass
  提示连接密码,默认Key验证
  -C,   --check
  检查,并不执行
  -T  --timeout=TIMEOUT
  执行命令的超时时间,默认10s
  -u   --user=REMOTE_USER
  执行远程执行的用户
  -b --become
  代替旧版的sudo 切换
  模块介绍
  模块名成
  功能介绍及常用参数
  ping
  一个简单的测试模块,这个模块总是在成功的接触中返回“乒乓”。这是不合理的
  但是它对于验证登录的能力和可用的python来说是有用的。
  配置。这不是ICMP ping,这只是一个简单的测试模块。对于Windows目标,使用
  (win_ping)模块。
  用法: anisble   主机    -m    ping
  command
  命令的模块接受命令名,后面是空格分隔的参数列表。给定的
  命令将在所有选定的节点上执行。它不会通过shell进行处理,所以变量
  “$ HOME”和操作,比如“<“”、“”>“”,“”|“”、“”;“和”不会起作用(使用shell模块
  如果您需要这些特性)。
  常见选项:
  1),chdir  <切换目录>   格式: ansible  主机组   -m command -a  ‘chdir=/app/   ls  -al   /app ’
  2),creates <判断如果文件不存在就执行后面的命令>  格式:  ansible  主机组   -m command -a  ‘creates=/etc/fstab   ls -al /app’
  3),removes <判断如果文件存在就执行后面的命令>  格式: ansible  主机组   -m  command -a  'removes=/etc/fstab  ls-al  /app/'
  shell
  shell的模块接受命令名,后面是空格分隔的参数列表。这几乎是
  与命令模块完全一样,但是在远程节点上通过shell(/bin/sh')运行命令
  支持 特殊符号$ HOME”和操作,比如“<“”、“”>“”,“”|“”、“”;“
  在执行命令是尽量使用单引号,
  其他用法基本跟command模块相同
  script
  脚本的模块接受脚本名称,发送到远程主机上执行,
  格式:ansible 主机组   -m  script   -a   ‘/app/f1 .sh ’
  copy
  copy'模块将一个文件从本地或远程机器复制到远程机器上的一个位置。使用com
  fetch模块将文件从远程位置复制到本地框。如果你需要变量插值
  在复制的文件中,使用模板模块。
  注意:copy模块复制文件如果目录不存在会自动创建目录
  常用参数:
  content:<把自定义内容复制到远程主机文件中>  格式 : content=“df -h \nls\n\hostname   dest=/app/f1.sh”
  src:<本机源文件>
  dest:<指定复制到目标主机的某个目录或者覆盖某个文件>
  backup:<文件复制到远程主机如果文件已存在可以将源文件做备份,再覆盖>   格式: backup=yes /no  yes表示做备份,no表示不做备份
  directory_mode :<复制整个目录>
  mode:<更改复制过去的文件权限>    格式: mode=644......
  owner:<更改复制过去的文件属主>   格式:owner=wang
  格式:ansible 主机组   -m copy -a  ‘src=/etc/fstab dest=/app/  backup=yes mode=644 owner=wang’
  fetch
  这个模块的工作方式类似于复制,但反过来。它用于从远程机器获取文件
  将它们存储在本地目录下
  常用参数:
  src:<指定远程主机的文件>
  dest:<指定本地主机的目录>
  格式:ansible  主机组  -m fetch -a  ‘src=/etc/fstab  best=/app/’
  file
  支持在被控主机创建空文件,创建软连接,删除文件等作
  常用选项:
  创建空文件:path=<指定创建文件路径>   一般配合state=touch使用
  创建软连接:src=<指定原始文件路径>  一般配合path=<创建到那个目录>,state=link<连接>
  创建目录:path=<指定路径>    一般配合state=directory使用
  删除文件:  path=<指定文件路径>  一般配合state=absent使用
  设置文件权限:mode<设置文件权限>     owner<设置文件属组>
  格式:
  创建文件
  ansible  主机组 -m file -a ‘path=/app/testfile state=touch’
  创建软连接
  absible 主机组  -m file -a ‘src=/app/testfile path=/tmp/testfile-link  stare=link’
  创建目录
  absible 主机住  -m file -a 'path=/app/dir1  state=directory'
  删除文件
  ansible 主机组 -m file -a ‘path=/app/testfile state=absent’e
  hostname
  更改被控主机端的主机名
  格式:
  ansible 主机   -m hostname -a 'name=名字'
  cron
  创建计划任务
  minute<分钟>
  day <天>
  hour<小时>
  weekday<周>
  month<月>
  job<执行的操作>  注意:命令需要写全路径
  name<计划任务的名字>
  disabled=yes <yes表示禁用计划任务,no表示启用计划任务>
  start=absent <表示删除计划任务>
  例子:
  ansible 主机组  -m cron -a 'minute=*/5 hour=12  weekday=0,6  job=&quot;/usr/sbin/wall  is jobs &quot; name=&quot;test job&quot;'
  此命令原理:  创建一个名为test job计划任务 每周六周天,凌晨12点没5分钟执行一次wall广播 is job
  禁用,启用计划任务
  ansible 主机组  -m cron -a 'disabled=yes/on job=&quot;执行的操作&quot;  name=&quot;计划任务名字&quot;'
  删除计划任务
  ansible  主机组  -m cron -a 'start=adsent  job=&quot;执行的操作&quot; name=&quot;计划任务名字&quot;'
  yum
  管理软件包模块
  安装软件包
  name=包名
  start=absent  卸载包
  start=latest   装最新版
  updata_cache=yes  更新yum缓存
  service
  管理服务状态模块
  常用选项
  name=<指定包名>

  state=<指定运行状态>   如:stopped<停止>,started<启动>,restarted<重启服务>,>  enabled=yes  表示把服务设置为开机自动重启
  格式:
  设置服务开机自动启动并且启动
  ansible 主机组  -m  service -a  'name=httpd state=started  enabled=yes'
  user
  创建管理用户
  常用选项:
  name=<指定用户名>
  comment=<描述信息>
  uid=<指定uid>
  home=<指定家目录路径>
  group=<指定 主组>
  groups=<指定辅助组>
  system=yes<yes表示创建的是系统用户>
  shell=<指定shell类型>
  remove=yes <yes表示把家目录等等相关数据全删除>
  例子:
  创建普通用户
  ansible 主机组  -m user -a 'name=&quot;test&quot; uid=2000 home=/app/test  group=wang groups=root,bin '
  创建系统用户   <注意:默认创建系统用户会创建家目录>
  ansible 主机组  -m user -a 'name=sys  system=yes  shell=nologin'
  删除用户并把家目录删除
  ansible 主机组  -m user -a 'name=&quot;test&quot;  state=absent remove=yes’
  group
  管理组
  name=<指定组名>
  state=<指定操作>
  例子
  创建组
  ansible 主机组  -m group -a 'name=group1  '
  删除组
  ansible 主机组 -m group -a 'name=group1 state=absent'
  setup
  显示所有被控主机的,所有主机信息,例如:IP,主机名,版本,等等信息
  常用选项
  filter=&quot;*信息*&quot;<作用用来匹配想要查看的信息>
  例子:
  ansible 主机组 -m setup  -a 'filter=&quot;*hostname*&quot;'   注意匹配时需要把匹配的值放在双星”*“号里面
  匹配主机列表的方式:
  All :表示所有Inventory中的所有主机
  ansible all –m ping
  *  :通配符
  ansible  “*”  -m ping    #匹配所有主机执行ping模块操作
  ansible  192.168.1.* -m ping  #匹配192.168.1.这个网段的所有主机,执行平模块操作
  ansible  “*srvs”  -m ping  #匹配主机组名后面srvs的主机组执行ping模块操作
  或关系:
  ansible “websrvs:appsrvs”  -m ping  #这表示匹配两个主机组里面的所有主机
  ansible  “192.168.1.10:192.168.1.20”  -m ping   #这是只针对两台主机执行ping模块操作
  逻辑与
  ansible “websrvs:&dbsrvs” –m ping   在websrvs组并且在dbsrvs组中的主机,才执行ping模块操作
  逻辑非
  ansible 'websrvs:!dbsrvs' –m ping   #在websrvs组,但不在dbsrvs组中的主机 ,执行平模块中操作
  综合逻辑
  ansible 'websrvs:dbsrvs:&appsrvs:!ftpsrvs' –m ping  #匹配在websrvszu或者在dbsrvs组,并且在appsrvs组,但不在ftpsrvszu里的主机,才会执行ping模块操作
  正则表达式
  ansible “~(web|db).*\.magedu\.com” –m ping  #匹配以带有web关键字后面跟任意字符.magedu.com的主机组,或者带有db关键字后面跟任意字符.magedu.com的主机组,执行ping模块操作
  ansible系列命令
  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:2.0+新增,可交互执行命令,支持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
  常用选项示例:
  查看主机组名里包括多少台主机
  anisble  主机分组名   --list-host
  如图:
DSC0000.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-542736-1-1.html 上篇帖子: ansible基础三 下篇帖子: ansible基础二
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表