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

[经验分享] ansible记录

[复制链接]

尚未签到

发表于 2018-7-30 06:23:48 | 显示全部楼层 |阅读模式
  Ansible基础记录如下:
  Ansible架构图:
DSC0000.png

  ansible核心组件:
  - ansible core:Ansible的核心程序
  - host iventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等
  - core modules:Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机
  - custom modules:自定义模块
  - playbook(yaml,jinjia2):YAML格式文件,多个任务定义在一个文件中
  - connect plugin:连接插件,Ansible和Host通信使用
  ansible特性:
  - 基于python实现,由Paramike,PyYAML和Jinjia2三个关键模块
  - 部署简单,agentless
  - 使用ssh协议
  - 主从集中化模式
  - 支持自定义模块
  - 支持playbook
  - 幂等性:一种操作可重复多次结果相同
  invetory文件说明:
[web01]  
192.168.0.1 ansible_ssh_user=root ansible_ssh_pass=xxx
  
[web02]
  
192.168.0.[2:5]    #从2到5的主机
  
[web03]    #对应变量
  
192.168.0.8 port=80 hostname="test01"
  
192.168.0.9 port=8080 hostname="test02"
  
[web03:vars]    #对web03组定义变量
  
server1=ttxsgoto1.com
  
server2=ttxsgoto2.com
  
[webservers:children]    #组嵌套,webservers组包括web01和web02下的主机
  
web01
  
web02
  
[webservers:vars]    #组定义变量
  
server1=tttxsgoto.com
  查看模块帮助信息:
  - ansible-doc -l
  - ansible-doc -s  module_name
  ansible命令应用:
  ansible <host-pattern> [-f forks] [-m module_name] [-a args]
  -f forks:启动并发线程数
  -m module_name:使用的模块名
  -a args:模块特有的参数
  常见模块:
  - command
  - cron
  - user
  - group
  - copy
  - file
  - ping
  - setup
  - service
  - shell
  - script
  - yum/apt
cron:计划任务  
        present: 安装任务
  
        absent:移除任务
  
        ansible local -m cron -a 'minute=*/5 job="/bin/echo abc > /root/abc.log" name="test cron job"  state="absent" '
user:用户管理  
        name:指明添加的用户名
  
        ansible local -m user -a 'name="user1"'
group:用户组管理  
        ansible local -m group -a 'name=user1 gid=306 system=yes'    #添加用户组
  
        ansible local -m group -a 'name=user1 gid=306 system=yes state=absent'    #删除用户组
copy:文件复制  
        src=:定义本地源路径
  
        content=:取代src=,定义内容直接写入到远程文件中
  
        dest=:定义远程路径,绝对路径
  
        ansible local -m copy -a 'src=/etc/fstab dest=/tmp/fstab.bak owner=root  mode=777'
  
        ansible local -m copy -a 'content="hello wrold\nabc\n" dest=/tmp/fstab.bak owner=root  mode=777'
file:文件管理属性  
        path=: 指明文件路径,可以使用name、dest来替换
  
        ansible local -m file -a ' owner=bigdata group=bigdata  mode=644 path=/tmp/fstab.bak'    #修改权限和组信息
  
        ansible local -m file -a 'path=/tmp/fstab.bak.link src=/tmp/fstab.bak state=link'  #软链接
ping:测试主机联通性  
        ansible local -m ping
setup:收集远程主机的facts  
        每个被管理节点会将自己相关的信息发生给远程的ansible主机,用于模板调用变量
  
        ansible local -m setup
service:常用服务的运行状态  
        enabled=: 开机自启动,为true和false
  
        name=: 服务名称
  
        state=: 启动状态,started,stopped,restarted;
  
        ansible local -m service -a "enabled=true name=nginx state=started"
shell:远程执行命令,可传递参数  
        用到管道等功能的复杂命令时使用shell命令
  
        ansible local -m shell -a "echo xxx | passwd --stdin user1"
script:将本地脚本在远程上执行  
        注意:使用相对路径指定脚本
  
        ansible local -m script -a "./test.sh"
yum/apt: 安装程序包  
        name=:    需要安装的程序包,可以加版本号
  
        state=:    present,lastest安装,absent表示卸载
  
        ansible local -m yum -a "name=zsh"    #安装
  
        ansible local -m apt -a "name=zsh state=absent"    #卸载
  playbook:通过yaml将多个模块组装起来运行多个任务
  组成结构:
  Playbooks:
  Tasks:任务列表
  Variables:变量
  Templates:模板
  Handlers:处理器,由某事件触发执行的操作
  Roles:角色
  运行说明:
  0)yaml语法检测
  ansible-playbook –syntax-check /path/to/playbook.yaml
  1)yaml测试运行
  ansible-playbook -C /path/to/playbook.yaml
  2)运行
  ansiable-playbook /path/to/playbook.yml
  -t TAGS  #给指定的任务定义一个调用标识
  --tags=TAGS #给指定的任务定义一个调用标识
  --skip-tags=SKIP_TAGS #跳过指定的标签
  --start-at-task=START_AT #从哪个任务后执行
  --list-tags    #查看标签
  基本结构:
例子1:  
- hosts: webservers
  
  remote_user: root
  
  tasks:
  
  - name: create nginx group
  
      group: name=nginx system=yes gid=208
  
  - name: create nginx user
  
      user: name=nginx uid=208 system=yes
  
- hosts: dbservers
  
  remote_user: root
  
  tasks:
  
  - name: copy file to dbsrvs
  
      copy: src=/etc/inittab dest=/tmp/inittab.bak
例子2(handler,vars):  
- hosts: webservers
  
  remote_user: root
  
  vars:
  
  - package: httpd
  
  - service: httpd
  
  tasks:
  
  - name: install httpd package
  
    yum: name={{ package }} state=lastest
  
  - name: install configuration file for httpd
  
      copy: src=/root/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
  
      notify:
  
      - restart httpd
  
  - name: start httpd service
  
      service: enabled=true name=httpd state=started
  
  handlers:
  
  - name: restart httpd
  
    service: name=httpd state=restarted
  
  - name: copy file
  
    copy: content="{{ ansible_all_ipv4_addresses }}" dest=/tmp/test.txt
例子3(条件测试):  
- hosts: webservers
  
  remote_user: root
  
  vars:
  
  - username: user1
  
  tasks:
  
  - name: create {{ username }}
  
      user: name={{ userneam }}
  
      when: ansible_fqdn == 'ttxsgoto'
例子4(迭代-for):  
- hosts: webservers
  
  remote_user: root
  
  - name: add username
  
    user: name={{ item.name }} state=present groups={{ item.groups }}
  
    with_items:
  
      - {name:'testuser1',groups='user1'}
  
      - {name:'testuser2',groups='user2'}
  
- hosts: webservers
  
  remote_user: root
  
  - name: add username
  
    user: name={{ item }} state=present groups=group1
  
    with_items:
  
      - testuser1
  
      - testuser2
例子5(templates/tags  ansible-playbook test.yml --tags='conf_chage'):  
#tags: 在playbook可以为某个任务定义一个标签,在执行playbook时,通过tags可实现仅运行指定tasks任务
  
- hosts: webservers
  
  remote_user: root
  
  vars:
  
  - package: httpd
  
  - service: httpd
  
  tasks:
  
  - name: install httpd package
  
    yum: name={{ package }} state=lastest
  
  - name: install configuration file for httpd
  
      template: src=/root/conf/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
  
     tags:
  
     - conf_chage
  
     notify:
  
      - restart httpd
  
  - name: start httpd service
  
      service: enabled=true name=httpd state=started
  
  handlers:
  
  - name: restart httpd
  
    service: name=httpd state=restarted
  roles:用于层次化、结构化的组织playbook;role能够根据层次结构自动装载变量文件、task以及handlers等,要使用roles只需要在playbook中使用include指令;roles通过分别将变量、文件、任务、模块及处理器放置在单独的目录中,并可以便捷地通过include它们的一种机制,角色一般用于基于主机构建服务的场景中;无实例,用到时在记录

运维网声明 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-543199-1-1.html 上篇帖子: ansible组件 下篇帖子: ansible+Jenkins+supervisor(Jenkins守护进程)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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