ansible

ansible管理模式:

  • hoc命令行
  • playbooks
  • roles

特性

  • 幂等性:一种操作重复多次结果相同(文件内容不作修改系统不会执行)
  • 线程:最小的调度单位
  • 进程:最小的管理单元,一个进程可以包含多个线程,最少一个线程
  • 模块化:调用特定的模块,完成特定任务
  • 有Paramiko,PyYAML,jinja2(模板语言)三个关键块
  • 支持自定义模块
  • 基于python语言实现
  • 部署简单
  • 安全,基于OpenSSH
  • 支持playbook编排任务
  • YAML格式,

Ansible执行过程

  • 将已经编排好的任务写入Ansible-Playbook
  • 通过ansible-playbook命令拆分任务至ansible命令,按预定规则逐条执行

Ansible主要操作对象:

  • hosts主机
  • networking 网络设备

注意事项

  • 执行ansible的主机称为主控端,中控,master或堡垒机
  • 主控端python版本需要2.6或以上
  • 被控端python版本小于2.4需要安装python-simplejson
  • 被控端如开启selinux需要安装libselinux-python #getenforce查看selinux状态
    #vim /etc/selinux/config 将selinux=enforcing 改为disabled
  • windows不能作为主控端

相关文件

  • /etc/ansible/ansible.cfg 配置文件(一般保持默认)
    ansible_第1张图片
  • /etc/ansible/hosts 主机清单
  • /etc/ansible/roles 存放角色的目录

程序

  • /usr/bin/ansible 主程序,临时命令执行工具
  • /usr/bin/ansible-doc 查看配置文档,模块功能查看工具 相当于man
  • /usr/bin/ansible-playbook 定制自动化任务,
  • /usr/bin/ansible-pull 远程执行命令的工具
  • /usr/bin/ansible-vault 文件加密工具

ansible 命令使用

  • ansible all -list 主机清单列表,列出所有的

      - ansible chen -list  列出单个的
    
  • –version 显示版本

  • -m 显示模块

  • -u 执行远程执行的用户

  • -k 提示输入ssh密码

  • -a 特有的参数 例如#ansible all -a ‘ls’

下载所需服务

  • yum -y install epel-release
  • yum -y install ansible

hoc命令行
ansible-doc-c yum 查看支持的模块
1.进入/etc/ansible/hosts编辑,生成一个管理组
ansible_第2张图片
2.生成密钥 ssh -keygen
cd .ssh

3#cd .ssh 这是在当前目录下

#ls

id_rsa.pub 公钥
id_rsa 私钥
cd .ssh

将公钥拷进管理用户

#scp id_rsa.pub [email protected]:/root/ .ssh/authorized_keys
或者
#ssh-copy-id -i id_rsa.pub [email protected]

拷贝时产生此原因:
在这里插入图片描述
解决方案
vim ~/.ssh/known_hosts,将里面多余的删除

产生此原因报错Agent admitted failure to sign using the key.
ansible_第3张图片
解决方法:

#ssh-add

以上两种原因都是在之前拷贝过公钥后,在主机群里更改了ip地址,准备再来一次时发生的错误

4.命令使用

#ansible chen -m copy -a 'src=/root/qiu dest=/root/'      将文件qiu拷贝到其它虚拟机中

ansible_第4张图片
执行192.168.1.12中/root/1.sh

#ansible 192.168.1.12 -a '/root/1.sh'

ansible_第5张图片

不支持特殊符号>$|,需要用到shell模块

#ansible chen -m shell -a 'echo $HOSTNAME'

ansible_第6张图片

如何在所有主机上运行脚本   此处用到script  script:运行脚本
先在管理主机上写好脚本,例如显示主机名,之后给予执行权限chmod +x test.sh
#ansible chen -m script -a '/root/test.sh'

复制移动文件时 在后面加backup=yes是指对文件进行备份

playbook
主要功能在于将事先归并为一组的主机装扮为事先通过ansible中的task定义好的角色。所谓task就是调用ansible的一个模块module。playbook采用YAML语言编写。

  • Hosts 执行的远程主机列表
  • tasks 任务计划
  • variables 变量
  • templates 模板
  • handlers 触发器(上一命令执行成功才执行里面的命令,否则不执行)
  • roles 模块化

运行playbook

运行方式

ansible-playbook filename.yml  options

常见选项

  • –check 只检测可能会发生的改变,不真正执行操作
  • –limit 限定某个主机执行
  • -v 显示更加详细执行过程

Ansible-vault命令
管理加密解密yml文件

  • ansible-vault encrypt *.yml 加密
  • ansible-vault decrypt *.yml 解密
  • ansible-vault rekey *.yml 修改口令
  • ansible-vault edit 编辑加密文
  • ansible-vault view 查看
  • ansible-vault create 创建新文件

ansible-playbook -C 检查yml文件写的是否正确
如果命令执行错误,则后续的命令不执行,如果需要执行,则我们可以在命令后加上 || /bin/true

vim test.yml
ansible_第7张图片
hosts #命令生效的组
remote_user #以root用户去执行
tasks: #任务
-name #任务名字

对更改httpd端口进行测试

- hosts: chen
  remote_user: root

  tasks:
    - name: create new file
      file: name=/root/newfile state=touch
    - name: create new user
      user: name=qiuchen
    - name: start service
      service: name=httpd state=started enabled=yes
    - name: copy file
      copy: src=/etc/httpd/conf/httpd.conf  dest=/etc/httpd/conf backup=yes
      notify: restart service       #触发器,

  handlers:          #当copy file文件发生修改时,才会触发notify,执行handlers
     - name: restart service
       service: name=httpd state=restarted

迭代嵌套

ansible_第8张图片

roles
通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷地include它们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。

复杂场景:建议用roles,代码复用度高

  • 变更指定主机或主机组

  • 某些功能需多个playbook,通过includes可实现

建议保存地址为 /etc/ansible

- name: create user
  user: name=nginx group=nginx system=yes shell=/sbin/nologin
  #  system=yes  代表系统用户

创建role

  1. 创建以roles命名的目录

  2. 在roles目录中分别建立以各角色名称命名的目录,如webservers等在roles目录中分别建立以各角色名称命名的目录,如webservers等

  3. 在每个角色命令的目录中分别创建files、handlers、meta、tasks、templates和vars目录;在每个角色命令的目录中分别创建files、handlers、meta、tasks、templates和vars目录,用不到目录可以不创建或者为空目录

  4. 在创建一个main.yml,指定文件顺序在创建一个main.yml,指定文件顺序

    • include: group.yml
    • include: user.yml
    • include: yum.yml
    • include: templ.yml
    • include: start.yml

之后返回ansible目录下,建立main.yml文件,编辑调用roles,

- hosts: chen
  remote_user: root

  roles:
    - httpd

结构为如下:
ansible_第9张图片
注:前提得有tree服务。

你可能感兴趣的:(ansible)