RHCA412-ansible

一般企业应用场景
Dev开发环境---测试环境---发布环境---生产环境
灰度环境(全量发布前先面向精准少量用户发布,可基于用户或者主机)

常用自动化工具
Ansible   Agentless   中小型应用环境                          ansible,saltstack用python编写
Saltstack    一般需要部署agent,执行效率高            
Puppet   功能强大,配置复杂                                       

ansible的特性
模式化(Paramiko,PyYAML,Jinja2三个关键模板),支持自定义模块,基于python语言,安全基于OpenSSH,幂等性

/etc/ansbile/ansible.cfg   -----主配置文件
[defaults]
#inventroy=   主机文件清单
#library=     库文件
#module_utils =  模块路径
#remote_tmp  =   远程临时目录
#local_tmp =  本地临时命令执行目录
#forks = 并行执行的操作数
#sudo_user =  root  以什么身份远程执行命令
#remote_port =  远程主机端口
#ask_sudo_pass = True  执行命令是否询问ssh密码
#host_key_cheeking = False  检查对应服务器的host_key(建议取消注释)
#log_path =    日志文件路径(建议开启)

ansible免密登陆其它主机
ssh-keygen -t rsa ----------生成密钥
修改/etc/ansible/ansible.cfg------------->host_key_checking = False 
修改/etc/ansible/hosts ------->ansible_ssh_user=root  ,ansible_ssh_pass=密码  ,ansible_ssh_port=22
ansible cli1 -m  authorized_key  -a "user=root key='{{ lookup('file', '/root/.ssh/id_rsa.pub') }}'" -----分发密钥
ansible   all   -m  ping   -----检查是否成功

ansible获得root的授权执行命令
/etc/sudorers   
%wheel   ALL=(ALL)  ALL   sudo授权组
%wheel   ALL=(ALL)  NOPASSWD:ALL    此为不用sudo验证。开启后ansible不用选项-K输入sudo口令
usermod  -aG  wheel   用户  ----将用户加入授权组
或者创建用户时useradd   -G   wheel   用户

命令
ansible   <host-pattern>   [-m  模块]  [-a  参数]          <host-pattern>  /etc/ansible/hosts主机列表名
ansible  all   -m  ping         
all ---匹配所有列表        还可以这样匹配          "*","192.168.1.*"     "组1:组2"   "IP1:IP2"   ' 组1:!组2' 在组1而不在组2
[-m   模块]
常用模块
command:默认模块(可不用-m),不支持¥VARNAME、<、>等符号
shell:调用bash命令
script:运行脚本    ansible   all    -m    script    -a  "  "
copy:拷贝模块,从服务端拷贝至客户端        ansible   all   -m  copy    -a  'src=        dest=     backup=yes'
fetch:从客户端拷贝文件至服务端       ansible   all   -m   fetch   -a   ''src=   dest= "
若要拷贝大量文件,可以将其打包再拿取
file:文件模块   ansible   all   -m   file   -a 'path/name/dest=     state=directory(目录)、absent(删除)、touch'
创建链接:  ansible   all   -m   file   -a  'src=    path=    state=link/hard'
hostname:管理主机名      ansible   all   -m  hostname   -a  'name=  '
cron:计划任务       ansible   all   -m  cron  -a 'minute=   job=   name=  '
  ansible   all   -m   cron  -a 'disabled=true/false /yes /on   job=      name=    state=absent  '
yum:包管理工具     ansible   all   -m   yum   -a   'name=    state=latest/absent    disable-gpg-check=yes(不用钥匙验证)'
server:服务管理       ansible   all   -m   server   -a   'name=   state=stoppde/restarted    enabled=yes'
user:管理用户      ansible   all   -m user   -a  'name=    shell=    uid=     system=yes(是否为系统用户)  home/groups(附加组)=   ' remove=yes    state=abset'
group:管理组
ansible-doc  ------------ >  显示模块帮助                                     ansible      --version       查看版本
                            -a    所有模块                                                                   -v  查看详细信息  -vv  -vvv
                            -l    可用模块显示                                                             --list    列出主机列表 
                            -s   显示模块playbook片段                                               -k       输入ssh连接密码,默认key验证
ansible-galaxy                                                                                              -K      输入sudo口令                                 
     http://galaxy.ansible.com                                                                         -u   user  远程执行的身份
     list  列出所有装载的galaxy
     install / remove  安装/删除                                                      ansible-pull    推送命令至远程主机
ansible-vault     管理加密解密yml文件                                         ansible-console   控制台管理
          encrypt/decrypt  file   加密/解密                                   root@all(3)[f:5]$--->远程角色:针对主机:主机列表数:最大并行数 
          view/edit                    查看/编辑
          rekey/create     修改口令/创建文件                 
 

                    ansible-playbook    文件(以.yaml/.yml为后缀名)
vim      jin.yml     缩进统一,tab和空格只能使用其中一种               --check   检测文件  -C
---                                                                                                     --list-hosts   列出运行任务主机
- hosts: all    针对所有主机                                                            --limit  主机列表   针对不同主机列表操作
  remote_user: root   远程执行身份                                               --list-tags   列出文件中标签

  tasks:                                                           如果命令或脚本推出码不为0,则在模块下行加ignore_errors:True
     - name: 描述                                             (或加shell:命令 | | /bin/true)   
       yum: (模块)
       file:name=   state=touch    
       copy: src=   dest=  backup=yes
       service:  name=    state=    enabled=yes
       notify:   jin
       tags:   yan    标签,指定关键字作为标签,可单独执行该部分命令,ansible-playbook  -t   yan  file  ,标签相同则一起执行
 handles:          handles和notify结合使用调用出发点,将notify加入指定name下,添加handles表明notify指定部分若发生变化,则会出发执行handles中的模块命令
     - name: jin   
       service:   xxx  

playbook中的变量使用
1.ansible   all   -m   setup   显示相关主机的环境变量       (-a  'filter=变量名')
2./etc/ansible/hosts 中定义
普通变量:主机组中主机单独定义             普通变量优先级高于公共变量
公共变量:针对所有主机
3.命令指定变量,优先级最高     ansible-playbook   -e   'varname=value'
4.playbook中定义
-  hosts:
   vars:
       - 变量名:变量
   vars_files:
       -  xx.yml
5.role中定义

template模块  ,根据目的机生成相适应的配置文件,模板位置随意,最好与playbook同级,存于templates目录中(.j2为后缀)
palybook中应用          --name:
                                      template:  scr=   dest= 

when语句的使用
- name:
  yum: name=
  when:  ansible_distribution_major_version == "7" 系统版本为7

解决重复操作(迭代)
- name:
  file:  name= /xx/{{ item }}
  with_items:
     -  file

迭代嵌套子变量
- name:
  user: name={{ item.name }}    group=={{ item.name }} 
  with_items:
       - {name:xxx ,group:xxx}

for循环语句
---                                                                               /templates/nginx.conf.j2
-  host:                                                                         {%  for  port  in  ports  %}
   remote_user                                                                         server  {  listen  {{ port.value }}
   vars:                                                                                          }
       ports:                                                                        {%   endfor  %}
           -  value : xxx
   tasks:

for循环加if条件判断                                                                        templates/nginx.conf.j2
xxx.yml                                                                                                {% for vhost in nginx_vhosts %}
-  hosts:                                                                                                 server{
   remote_user:                                                                                          listen {{ vhost.listen }}
   vars:                                                                                                       {% if vhost.server_name is defined %}
      nginx_vhosts:                                                                                        server_name {{ vhostserver_name}}
         - web1:                                                                                             {% endif %} 
           listen:8080                                                                                       root {{ vhost.root }}
           root: "/var/www/nginx/web1“                                                              }
         - web2:                                                                                       {%  endif %}        
           listen:8080                                                                      生成内容
           server_name: yi.yan.com                                                          server{
           root: "/var/www/nginx/web2“                                                             listen  8080                                                                                                                                                                                        root  /var/www/nginx/web1
                                                                                                                        }

   tasks:                                                                                                  server{
      - name:                                                                                                 listen 8080
         template: src=  dest=                                                                         server_name: yi.yan.com                                                                                                                                                                    root: /var/www/nginx/web2                                                                                                                                                                    }
role的复杂场景使用(将playbook中的各个部分分别放在不同的目录,方便调用。)
在roles目录下创建需求对应文件夹                          mkdir   roles/{xx,xx,xx} -pv             剧本playbook文件与roles目录平级
例子:安装nginx (group:nginx  user:nginx  yum:nginx  service)
/etc/ansible/roles创建nginx目录     cd /etc/ansible/roles/nginx   vim  group.yml  user.yml   yum.yml   service.yml  template.yml
并且创建汇总文件,指定文件执行顺序  vim    main.yml       - include: group.yml .....
于roles同级创建playbook调用       
vim   use_nginx.yml   
  -  hosts:
     remote_user:
     roles:
        - role:
                                                        
                                                                                                                                                                                                       

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值