191145692 发表于 2018-7-29 10:26:19

Ansible组件介绍

  1.Ansible Inventory定义主机和主机组,定义多个主机组方便维护
  例如:
  192.168.1.1 ansible_ssh_pass='1111111' #定义了主机和密码
  192.168.1.2ansible_ssh_pass='1111111'
   #定义了一个组叫docker
  192.168.1.10#定义了docker组下主机从192.168.1.101到192.168.1.103
  # 定义docker组ssh登录的密码、端口或者账号等等
  ansible_ssh_pass='1111111'
  ansible_ssh_port=22
   #定义一个组叫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,规范目录结构
# 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]
查看完整版本: Ansible组件介绍