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

[经验分享] Ansible组件介绍

[复制链接]

尚未签到

发表于 2018-7-29 10:26:19 | 显示全部楼层 |阅读模式
  1.Ansible Inventory定义主机和主机组,定义多个主机组方便维护
  例如:
  192.168.1.1 ansible_ssh_pass='1111111' #定义了主机和密码
  192.168.1.2  ansible_ssh_pass='1111111'
  [docker] #定义了一个组叫docker
  192.168.1.10[1:3]  #定义了docker组下主机从192.168.1.101到192.168.1.103
  [docker:vars]  # 定义docker组ssh登录的密码、端口或者账号等等
  ansible_ssh_pass='1111111'
  ansible_ssh_port=22
  [ansible:children] #定义一个组叫ansible,这个组下面包含docker组
  docker
  测试:ansible 192.168.1.1 -m ping -o
  192.168.1.1 | SUCCESS => {"changed": false, "ping": "pong"}
  多个主机列表
  1)修改ansible.cfg中host定义到目录inventory      = /etc/ansible/inventory/
  测试:ansible docker --list-hosts和ansible ansible --list-hosts
  hosts (2):
  192.168.1.1
  192.168.1.2
  #ansible test1 -m ping -o
  192.168.1.1 | SUCCESS => {"changed": false, "ping": "pong"}
  192.168.1.2 | SUCCESS => {"changed": false, "ping": "pong"}
  2.动态Inventory: ansible中主机列表和变量信息支持从外部拉取
  需要自己编写脚本获取,不受语言限制
  Inventory内置参数
名称                           例子                                   解释ansible_ssh_host               主机的名字                             SSH目的主机名或IPansible_ssh_port               22                                    SSH目的端口ansible_ssh_user               root                                  SSH登录使用的用户名ansible_ssh_pass               none                                  SSH认证所使用的密码ansible_connection             smart                              ansible使用何种连接模式连接到主机ansible_ssh_private_key_file   none                                  SSH认证所使用的私钥ansible_shell_type             sh                                    命令所使用的shellansible_python_interpreter     /usr/bin/python                       主机上的python解释器ansible_sudo                   定义host sudo 用户                     ansible_sudo=xxxansible_sudo_pass              none                                  host sudo密码ansible_sudo_exe               ansible_sudo_exe=/usr/bin/sudo        host sudo路径ansible_connection             ansible_connection=local              定义hosts 链接方式ansible_ssh_private_key_file   ansible_ssh_private_key_file=/root/key 定义host秘钥  ansible_shell_type            ansible_shell_type=zsh                定义hosts shell类型
  ansible_python_interpreter    ansible_python_interpreter=/usr/bin/python2.7 定义hosts任务执行python路径
  
  远程命令模块:command、shell、scripts
  Ansible Ad-Hoc组件
  ansible命令都是并发执行

  •   copy模块批量下发文件:文件变化通过MD5来判断
      例如:$ansible 192.168.1.2 -m copy -a 'src=/home/test/dump.sh dest=/home/test/ owner=test group=test mode=600 backup=yes' -o
      192.168.1.2 | SUCCESS => {"changed": true, "checksum": "61c25bb854593abf2b6d5bd47b187b207a141c72", "dest": "/home/test/dump.sh", "gid": 500, "group": "test", "md5sum": "2ec1900bf05cadeb74a28f6d6597f4aa", "mode": "0600", "owner": "test", "size": 6979, "src": "/home/test/.ansible/tmp/ansible-tmp-1504495347.87-254032109614069/source", "state": "file", "uid": 500}
      例如:ansible strike -m copy -a 'src=/home/tain/test dest=/usr/tain/test owner=cctain group=cctain mode=644' -o  //指定拷贝到某个组
      获取远程文件状态信息:ansible 192.168.1.2 -m stat -a "path=/etc/sysctl.conf"
  •   1)get_url 模块:实现在远程主机下载指定URL到本地
      $ansible 192.168.1.2 -m get_url -a "url=http://www.baidu.com dest=/tmp/index.html mode=0440 force=yes"
      2)定时任务模块:
      ansible 192.168.1.2 -m cron -a "name='crontab test' minute=0 hour=5,2 job='ls -alh > /dev/null'"
  •   使用Ad-Hoc命令管理包和服务
      $ansible 192.168.1.2 -m yum -a 'name=httpd state=latest' -f 5 -o   //安装httpd,卸载就改成state=remove
      $ansible 192.168.1.2 -m service -a 'name=nginx state=started' -f -o
      192.168.1.2 | SUCCESS => {"changed": false, "name": "nginx", "state": "started"}
      验证服务是否有安装:
      $ansible 192.168.1.2 -m shell -a "rpm -qa nginx" -f 5 -o
      192.168.1.2 | SUCCESS | rc=0 | (stdout) nginx-1.12.1-1.el6.x86_64
      $ansible 192.168.1.2 -m shell -a "netstat -tpln| grep nginx" -f 5
      192.168.1.2 | SUCCESS | rc=0 >>
      tcp   0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      9930/nginx
  •   用户管理
      1)通过openssl生成密码:因为ansible user的passwd参数需要接受加密后的值
      $echo ansible | openssl passwd -1 -stdin
      $1$fcpQxeGv$VErvNXelrmLxprVIZC/DS1
      使用user模块批量新建用户
  •   ansible192.168.1.2 -m user -a 'name=test password="$1$fcpQxeGv$VErvNXelrmLxprVIZC/DS1"' -f 5 -o
  •   通过ssh 192.168.1.2 -l test 验证是否可以登录
  ansible playbook 进行配置管理的组件,Ad-Hoc 无法支撑复杂环境的配置管理工作
  1.ansible facts采集主机静态信息的一个组件
  例如:ansible 192.168.1.2 -m setup  收集该服务器各种设备信息
  ansible test -m setup -a "filter=ansible_all_ipv4_addresses"  //setup中单独指定一个信息
  ansible 192.168.1.2 -m shell -a 'rpm -qa ruby-json facter'  //判断被控制机器上是否安装了这2个包
  ansible 192.168.1.2 -m facter
  2.ohai扩展facts信息
  ohai是chef配置管理工具中检测节点属性的工具
  ansible 192.168.1.2 -m shell -a "yum list| grep ohai"
  ansible 192.168.1.2 -m ohai
  Ansible role:采用role方式管理playbook,规范目录结构
[root@node1 playbook]# cat web.yml  
- hosts: test  \\主机组,在/etc/ansible/hosts定义
  
  remote_user: root  \\远端执行任务的用户
  
  tasks: \\任务
  
  - name: install httpd  \\任务描述
  
    command: yum -y install httpd  \\调用ansible的command模块安装httpd
  
  - name: provide httpd.conf \\任务描述
  
    copy: src="/root/httpd.conf" dest="/etc/httpd/conf/httpd.conf" \\调用ansible的copy模块,httpd安装完成后将事先准备好的httpd.conf文件复制到/etc/httpd/conf目录下
  
    tags: conf  \\给此任务打标记,可单独执行标记的任务,使用 ansible-playbook -C 命令执行
  
    notify:  \\文件内容变更通知
  
    - server restart  \\通知到指定的任务
  
  - name: server start  \\任务描述
  
    service: name=httpd state=started enabled=true \\调用ansible的service模块的属性定义安装完成httpd以后httpd服务的管理
  
  handlers: \\定义接受关注的资源变化后执行的动作
  
  - name: server restart  \\任务描述
  
    service: name=httpd state=restarted   \\当关注的资源发生变化后调用service模块,采取的响应的动作
roles/ \\ansible所有的信息都放到此目录下面对应的目录中  
└── nginx  \\角色名称
  
    ├── default  \\为当前角色设定默认变量时使用此目录,应当包含一个main.yml文件;
  
    ├── files  \\存放有copy或script等模块调用的文件
  
    ├── handlers \\此目录总应当包含一个main.yml文件,用于定义各角色用到的各handler
  
    ├── meta \\应当包含一个main.yml,用于定义角色的特殊设定及其依赖关系;1.3及以后版本支持
  
    ├── tasks \\至少包含一个名为main.yml的文件,定义了此角色的任务列表,可使用include指令
  
    ├── templates \\template模块会自动在此目录中寻找Jinja2模板文件
  
    └── vars  \\应当包含一个main.yml文件,用于定义此角色用到的变量
  
     mkdir -pv roles/nginx/{tasks,files,templates,handlers,vars,meta,default}
  Ansible Galaxy :官方分析role功能的平台
  网址:https://galaxy.ansible.com/list#/roles
  使用ansible-galaxy install默认安装到/etc/ansible/roles/

运维网声明 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-542909-1-1.html 上篇帖子: ansible安装与配置文件 下篇帖子: ansible-playbook之block
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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