码迷,mamicode.com
首页 > 其他好文 > 详细

ansible

时间:2018-04-13 14:29:51      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:ansible

2.24 ansible
#################################################
部署ansible环境
一、配置7.4的源
真实主机254:将桌面文件夹 ansible与ansible_1 拷贝到 /var/www/html

二、关闭selinux firewall

三、配置mangle主机的yum源
1.下载ansible软件
2.升级两个版本低的软件包
yum update python2-pyasn1 python2-cryptography
3.查看ansible版本
ansible --version

四、配置域名并创建组

vim /etc/hosts //配置域名

vim /etc/ansible/hosts //创建添加组

  添加变量

vim /etc/ansible/ansible.cfg //无需使用密码远程

ansible 组 --list -hosts //查看

ansible web -m ping

ssh web1

不同路径下分组

mkdir /var/my

vim /var/my/ansible.cfg //指定路径

vim myhosts //添加创建组

ansible aa --list-hosts

五、使用交互式密码分组

vim /etc/ansible/hosts //删除变量

ansible all -m command -a ‘hostname‘ -k

ansible all -m command -a ‘id‘ -k //查看

使用脚本,脚本输出的必须是json格式(ansible方可识别)

六、创建密钥实现批量去除密码配置

rm -rf ~/.ssh/*

cd /root/.ssh

ssh-keygen //创建密钥

ls

ansible all -m authorized_key -a "user=root exclusive=true manage_dir=true key=‘$(< /root/.ssh/id_rsa.pub)‘" -k -v //批量传送密钥

ssh web1 //测试

#################################################
ansible
自动化运维
自动化 DevOps
仅需要ssh和Python即可使用
无客户端

如何选择一款配置管理软件
活跃度(社区是否活跃)
学习成本
使用成本
编码语言
性能
使用是否广泛

创建公钥和私钥对

无限可能Inventory 通过脚本获得外部host信息 脚本输出必须是Json格式

ansible <host-pattern> [options]
-host-pattern 主机戒定义的分组
-M 指定模块路径
-m 使用模块,默认 command 模块
-a or --args 模块参数
-i inventory 文件路径,戒可执行脚本
-k 使用交互式登陆密码
-e 定义变量
-v 详细信息,-vvvv 开启 debug 模式

ansible all -m command -a ‘cp /etc/passwd /tmp/mima‘

批量部署证书文件

模块
ansible-doc
模块的手册 相当于shell的man
ansible-doc -l 列出所有的模块
ansible-doc [模块名] 查看帮助
ansible-doc modulename 查看modulename帮助

ping模块
command模块 #未指定模块 默认为command 未启动shell

shell | raw 模块
shell调用/bin/sh进行执行命令
raw 没有chdir creates removes 参数

script 模块

cat a.sh

#!/bin/bash
if ! $(id lisi > /dev/null) ;then
useradd -g 100 zhangsan
echo 123456| passwd --stdin zhangsan
chage -d 0 zhangsan

ansible all -m script -a ‘a.sh‘

#################################################
分发配置文件
copy模块
src:要复制到进程主机的文件在本地的地址,可以是
绝对路径,也可以是相对路径。如果路径是一个目录,
它将递归复制。在这种情况下,如果路径使用"/"来结
尾,则只复制目录里的内容,如果没有使用"/"来结尾,
则包含目彔在内的整个内容全部复制,类似于rsync

dest:必选项。进程主机的绝对路径,如果源文件是
一个目录,那么该路径也必须是个目录

复制文件
ansible all -m copy -a ‘src=/root/alog dest=/root/a.log‘
复制目录
ansible all -m copy -a ‘src=urdir dest=/root/‘

适合短小的目录与文件的分发
#################################################
lineinfile 模块
类似于sed的一种行编辑替换模块
path=路径/文件 目的文件
regexp=正则 匹配
line=修改后的该行

ansible all -m lineinfile -a ‘path="/etc/sysconfig/network-scripts/ifcfg-eth0" regexp="^BOOTPROTO=" line="BOOTPROTO=static"‘

replace 模块
path=路径/文件 目的文件 修改哪个文件
regexp=正则 匹配 修改哪个地方
replace=替换后的字符 修改成什么样子

ansible all -m replace -a ‘path="/etc/sysconfig/network-scripts/ifcfg-eth0" regexp="^(BOOTPROTO=).*" replace="\1none"‘

ansible all -m replace -a ‘path="/etc/selinux/config" regexp="^(SELINUX=).*" replace="\1disabled"‘

修改配置文件 相同的用copy 不同的 用linefile|replace
#################################################
yum 模块
yum模块
使用yum包管理器来管理软件包
config_file:yum的配置文件
disable_gpg_check:关闭gpg_check
disablerepo:不启用某个源
enablerepo:启用某个源
name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径
state:状态(present,absent,latest) #不写状态默认是安装

yum模块
删除软件包
ansible all -m yum -a ‘name="lrzsz" state=absent‘
删除多个软件包
ansible all -m yum -a ‘name="lrzsz,lftp" state=absent‘
安装软件包
ansible all -m yum -a ‘name="lrzsz"‘
安装多个软件包
ansible all -m yum -a ‘name="lrzsz,lftp"‘

service模块
name:必选项,服务名称
enabled:是否开机启动 yes|no
sleep:如果执行了restarted,在则stop和start之间
沉睡几秒钟
state:对当前服务执行启动,停止、重启、重新加载
等操作(started,stopped,restarted,reloaded)
ansible all -m service -a ‘name="sshd" enabled="yes" state="started"‘

在web1 web2 上安装apache
并且设置开机启动 启动服务 并且把端口改称8080
修改默认主页为hello world

auto_apache.sh

#!/bin/bash
ansible all -m yum -a ‘name="httpd"‘
ansible all -m lineinfile -a ‘path="/etc/httpd/conf/httpd.conf" regexp="^Listen" line="Listen 8080"‘
ansible all -m service -a ‘name="httpd" enabled="yes" state="started"‘
echo hello world > /root/test.html
ansible all -m copy -a ‘src=/root/test.html dest=/var/www/html/index.html‘

setup模块
用于获取主机信息
filter 可以过滤到我们需要的信息
ansible t1 -m setup -a ‘filter=ansible_distribution‘
#################################################
ansible 脚本

playbook 基础
ansible 七种武器

ansible 命令 用于执行临时性的工作

ansible-doc 说明文档

ansible-console

ansible-galaxy

ansible-playbook ansible的脚本

ansible-vault 配置文件加密

ansible-pull 与push工作模式相反 数量巨大的机器需要管理时

json 数据格式 轻量级数据交换格式 JavaScript 对象表示法
yaml 数据格式
jinja2 数据格式

playbook 由YAML语言编写 遵循YAML标准
由---开始 ansible的命令流

检测所有主机是否连通

vim ping.yml #创建playbook


  • hosts: all
    remote_user: root
    tasks:
    • ping:

ansible-playbook ping.yml -f 5 #运行playbook

-f 并发进程数量 默认是5
tasks 在对应的所有主机上执行的命令 上一个命令执行完毕后 才会执行下一个命令

实验案例
给所有主机添加plj用户
默认密码为123456
要求第一次登陆修改密码

vim useradd.yml


  • hosts: all
    remote_user: root
    tasks:
    • name: create user plj
      user: name=plj groups=users
    • shell: echo 123456 | passwd --stdin plj
    • shell: chage -d 0 plj

选项 -name 给命令做一个简短的注释
#################################################
playbook 语法进阶

定义变量以及过滤器的使用

vim useradd.yml


  • hosts: all
    remote_user: root
    vars:
    username: lx
    tasks:
    • user: name={{username}} groups=users password={{‘123456‘|password_hash(‘sha512‘)}}
    • shell: chage -d 0 {{username}}

ansible-playbook对错误的处理 上一个命令的返回值如果不为0 则中止执行

忽略当前产生的错误
第一种方式:
shell: /usr/bin/somecommand || /bin/true
第二种方式:

  • name: run some command
    shell: /usr/bin/somecommand
    ignore_errors: true

#################################################
handlers 用于当关注的资源发生变化时采取一定的操作

vim setup_apache.yml


  • hosts: all
    remote_user: root
    tasks:
    • name: remove apache
      yum:
      name: httpd
      state: absent
      ignore_errors: true
    • name: install apache
      yum: name=httpd
    • name: config httpd.conf
      copy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf
      notify:
      • restart httpd
        handlers:
    • name: restart httpd
      service: name=httpd state=restarted

#################################################
when 当满足特定条件时 触发操作
register 变量注册 保存某个命令的执行结果

写一个playbook 要求查看web服务器的负载情况 当系统负载大于0.7的时后 停止apache服务
uptime | awk ‘{printf("%.2f\n",$(NF-2))}‘ 输出系统负载

vim load.yml


  • hosts: all
    remote_user: root
    tasks:
    • shell: uptime | awk ‘{printf("%.2f\n",$(NF-2))}‘
      register: result
    • service: name=httpd state=stopped
      when: result.stdout|float > 0.7

使用

awk ‘BEGIN{while(1){}}‘& 提高系统负载

watch -n 1 ‘uptime ;netstat -anptu | grep 80‘ 同时查看uptime以及apache的运行状态

#################################################
with_items playbook的标准循环

vim useradd_item.yml


  • hosts: all
    remote_user: root
    tasks:
    • user:
      name: "{{item.name}}"
      group: "{{item.group}}"
      with_items:
      • {name: ‘nb‘, group: ‘users‘}
      • {name: ‘dd‘, group: ‘root‘}
        #################################################
        with_nested 嵌套循环
        #################################################
        tag 标签
        #################################################
        ansible调试方法
        检测诧法
        ansible-playbook --syntax-check playbook.yaml

测试运行
ansible-playbook -C playbook.yaml

显示收到影响到主机 --list-hosts
显示工作的 task --list-tasks
显示将要运行的 tag --list-tags

debug模块 运行时输出更详细的信息 帮助排错

  • hosts: 192.168.1.16
    remote_user: root
    tasks:
    • shell: uptime |awk ‘{printf("%f\n",$(NF-2))}‘
      register: result
    • shell: touch /tmp/isreboot
      when: result.stdout|float > 0.5
    • name: Show debug info
      debug: var=result

ansible

标签:ansible

原文地址:http://blog.51cto.com/2168836/2102949

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!