wss1051 发表于 2018-7-30 06:23:48

ansible记录

  Ansible基础记录如下:
  Ansible架构图:

  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文件说明:
  
192.168.0.1 ansible_ssh_user=root ansible_ssh_pass=xxx
  

  
192.168.0.    #从2到5的主机
  
    #对应变量
  
192.168.0.8 port=80 hostname="test01"
  
192.168.0.9 port=8080 hostname="test02"
  
    #对web03组定义变量
  
server1=ttxsgoto1.com
  
server2=ttxsgoto2.com
  
    #组嵌套,webservers组包括web01和web02下的主机
  
web01
  
web02
  
    #组定义变量
  
server1=tttxsgoto.com
  查看模块帮助信息:
  - ansible-doc -l
  - ansible-doc -smodule_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=rootmode=777'
  
      ansible local -m copy -a 'content="hello wrold\nabc\n" dest=/tmp/fstab.bak owner=rootmode=777'
file:文件管理属性  
      path=: 指明文件路径,可以使用name、dest来替换
  
      ansible local -m file -a ' owner=bigdata group=bigdatamode=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/tagsansible-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]
查看完整版本: ansible记录