ansible 入门学习(一)

 一,ansible 目录结构

(来自于ansible权威指南)

二,ansible.cfg 配置项说明

/etc/ansible/ansible.cfg -->

————————————————————————————————————————————————————————————

  • ANSIBLE_CFG 环境变量,可以定义配置文件的位置
  • ansible.cfg 存在于当前工作目录
  • ansible.cfg 存在与当前用户家目录
  • /etc/ansible/ansible.cfg

ansible 配置文件默认存使用 /etc/ansible/ansible.cfg
hosts文件默认存使用 /etc/ansible/hosts

[defaults]

配置说明
#inventory = /etc/ansible/hosts 指定主机清单文件
#library = /usr/share/my_modules/ 指定模块地址
#remote_tmp = $HOME/.ansible/tmp 指定远程执行的路径
#local_tmp = $HOME/.ansible/tmp ansible 管理节点得执行路径
#forks = 5 置默认情况下Ansible最多能有多少个进程同时工作,默认设置最多5个进程并行处理
#poll_interval = 15 轮询间隔
#sudo_user = root sudo默认用户
#ask_sudo_pass = True 是否需要用户输入sudo密码
#ask_pass = True 是否需要用户输入连接密码
#transport = smart  
#remote_port = 22 远程链接的端口
#module_lang = C 这是默认模块和系统之间通信的计算机语言,默认为’C’语言.
#module_set_locale = True  
#gathering = implicit  
#gather_subset = all 定义获取fact的子集,默认全部
#roles_path = /etc/ansible/roles 角色存储路径
#host_key_checking = False 跳过ssh 首次连接提示验证部分,False表示跳过。
#stdout_callback = skippy  
#callback_whitelist = timer, mail  
#task_includes_static = True  
#handler_includes_static = True  
#sudo_exe = sudo sudo的执行文件名
#sudo_flags = -H -S -n sudo的参数
#timeout = 10 连接超时时间
#remote_user = root 指定默认的远程连接用户
#log_path = /var/log/ansible.log 指定日志文件
#module_name = command 指定ansible默认的执行模块
#executable = /bin/sh 用于执行脚本得解释器
#hash_behaviour = replace 如果变量重叠,优先级更高的一个是替换优先级低得还是合并在一起,默认为替换
#private_role_vars = yes 默认情况下,角色中的变量将在全局变量范围中可见。 为了防止这种情况,可以启用以下选项,只有tasks的任务和handlers得任务可以看到角色变量。
#jinja2_extensions = jinja2.ext.do,jinja2.ext.i18n jinja2的扩展应用
#private_key_file = /path/to/file 指定私钥文件路径
#vault_password_file = /path/to/vault_password_file 指定vault密码文件路径
#ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host} 定义一个Jinja2变量,可以插入到Ansible配置模版系统生成的文件中
#display_skipped_hosts = True 如果设置为False,ansible 将不会显示任何跳过任务的状态.默认选项是显示跳过任务的状态
#display_args_to_stdout = False  
#error_on_undefined_vars = False 如果所引用的变量名称错误的话, 是否让ansible在执行步骤上失败
#system_warnings = True  
#deprecation_warnings = True  
#command_warnings = False  
#action_plugins = /usr/share/ansible/plugins/action action模块的存放路径
#callback_plugins = /usr/share/ansible/plugins/callback callback模块的存放路径
#connection_plugins = /usr/share/ansible/plugins/connection connection模块的存放路径
#lookup_plugins = /usr/share/ansible/plugins/lookup lookup模块的存放路径
#vars_plugins = /usr/share/ansible/plugins/vars vars模块的存放路径
#test_plugins = /usr/share/ansible/plugins/test test模块的存放路径
#strategy_plugins = /usr/share/ansible/plugins/strategy strategy模块的存放路径
#bin_ansible_callbacks = False  
#nocows = 1  
#cow_selection = default  
#cow_selection = random  
#cow_whitelist=bud-frogs,bunny,cheese,daemon,default,dragon,elephant-in-snake,elephant,eyes,
#nocolor = 1 默认ansible会为输出结果加上颜色,用来更好的区分状态信息和失败信息.如果你想关闭这一功能,可以把’nocolor’设置为‘1’:
#fact_caching = memory fact值默认存储在内存中,可以设置存储在redis中,用于持久化存储
#retry_files_enabled = False 当playbook失败得情况下,一个重试文件将会创建,默认为开启此功能
#retry_files_save_path = ~/.ansible-retry 重试文件的路径,默认为当前目录下.ansible-retry
#squash_actions = apk,apt,dnf,package,pacman,pkgng,yum,zypper Ansible可以优化在循环时使用列表参数调用模块的操作。 而不是每个with_项调用模块一次,该模块会一次调用所有项目一次。该参数记录哪些action是这样操作得。
#no_log = False 任务数据的日志记录,默认情况下关闭
#no_target_syslog = False 防止任务的日志记录,但只在目标上,数据仍然记录在主/控制器上
#allow_world_readable_tmpfiles = False  
#var_compression_level = 9 控制发送到工作进程的变量的压缩级别。 默认值为0,不使用压缩。 此值必须是从0到9的整数。
#module_compression = 'ZIP_DEFLATED' 指定压缩方法,默认使用zlib压缩,可以通过ansible_module_compression来为每个主机设置
#max_diff_size = 1048576 控制--diff文件上的截止点(以字节为单位),设置0则为无限制(可能对内存有影响)

[privilege_escalation]
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False

[paramiko_connection]
#record_host_keys=False
#pty=False

[ssh_connection]

配置说明
#ssh_args = -o ControlMaster=auto -o ControlPersist=60s ssh连接时得参数
#control_path = %(directory)s/ansible-ssh-%%h-%%p-%%r 保存ControlPath套接字的位置
#pipelining = False SSH pipelining 是一个加速 Ansible 执行速度的简单方法。ssh pipelining 默认是关闭,之所以默认关闭是为了兼容不同的 sudo 配置,主要是 requiretty 选项。如果不使用 sudo,建议开启。打开此选项可以减少 ansible 执行没有传输时 ssh 在被控机器上执行任务的连接数。不过,如果使用 sudo,必须关闭 requiretty 选项。
#scp_if_ssh = True 该项为True时,如果连接类型是ssh,使ansible使用scp,为False是,ansible使用sftp。默认为sftp
#sftp_batch_mode = False 该项为False时,sftp不会使用批处理模式传输文件。 这可能导致一些类型的文件传输失败而不可捕获,但应该只有在您的sftp版本在批处理模式上有问题时才应禁用

[accelerate]
加速配置
#accelerate_port = 5099
#accelerate_timeout = 30
#accelerate_connect_timeout = 5.0
#accelerate_daemon_timeout = 30
#accelerate_multi_key = yes

[selinux]

配置说明
#special_context_filesystems=nfs,vboxsf,fuse,ramfs 文件系统在处理安全上下文时需要特殊处理,定义复制现有上下文的文件系统
#libvirt_lxc_noseclabel = yes 将此设置为yes,以允许libvirt_lxc连接在没有SELinux的情况下工作。

[colors]
定义输出颜色
#highlight = white
#verbose = blue
#warn = bright purple
#error = red
#debug = dark gray
#deprecate = purple
#skip = cyan
#unreachable = red
#ok = green
#changed = yellow
#diff_add = green
#diff_remove = red
#diff_lines = cyan

配置來源:简书

 三,ansible使用

01)配置host-----------》

02)参数说明

  ansible <host-pattern> [options]

  <host-pattern> 这个就是Inventroy中定义的主机或者主机组  <> 这个选项内容是必须要有的

  [options]是Ansible参数选项   [ ]任选参数

  -m    NAME,--module-name=NAME:执行使用的模块

  -u  USERNAME,--user=USERNAME  指定远程主机以USERNAME执行

  -s    --sudo:相当于sudo

  -U SUDO_USERNAME,--sudo-user=SUDO_USERNAME 使用sudo

 

ansible all -m ping ----->在这个之前看我expect文章配置ssh+key全网分发,本身是具有分发的,你可以试试

ok

三,ansible系列命令详解

01,ansible

  临时性操作,二次开发接口的调用,没有规律的性的操作

  如ansible all -m ping

  复制文件到目标上

  ansible all -m copy -a “src=/server/seript dest=/tmp/tset owner=root group=root mode=644 backup=yes”

    返回颜色有三种:红色        绿色       橘黄色

      红色:代表执行异常

    

 

      绿色: 执行成功

    

 

      橘黄色:执行成功但是目标存在状态变化

      

02,ansible-galaxy

    这个功能可以理解为git与pip的功能,安装软件

    命令格式

    ansible-galaxy [ init | info | install | list | remove  ] [ -- help ] [ option ]

    001) [ init | info | install | list | remove  ]

         0001)init :初始化本地指定软件的配置

         0002)info : 列表指定的详细信息

         0003)install :下载并安装galaxy指定de软件到本地

         0004)list : 列出本地已下载的指定软件

         0005)remove :删除一下在的指定软件

    002) [ -- help ]

         前面的内容进行帮组

    003)[ option ]

            -f, --force           Force overwriting an existing role

            强制覆盖
            -h, --help            show this help message and exit
               显示这个帮助信息和退出

               -c, --ignore-certs    Ignore SSL certificate validation errors.
                忽略SSL证书验证错误。

           --init-path=INIT_PATH
                              The path in which the skeleton role will be created.
                              The default is the current working directory.

             默认值是当前工作目录。
             --offline             Don't query the galaxy API when creating roles

           离线时,在创建角色时不要查询galaxy API
            --role-skeleton=ROLE_SKELETON
                             The path to a role skeleton that the new role should be based upon.

03,Ansible-pull

    pull工作模式(ansible默认使用push模式)

    适合场景:1,机器数量巨大需要配置,效率高,

         2,在刚刚启动的,没有网络上的主机运行

04,Ansible-doc

    Ansible模块文档说明,相当于linux  man

          

 

05,Ansible-playbook

    使用率超级高的模块

      工作机制:通过读写预编译的playbook文档实现批量管理

    play具有编写简单,可定制性高,灵活方便,可以固话日常所有操作,

06,Ansible-vault

    用于配置文件加密

 格式:   

 ansible-vault  [ create | decrypt | edit | encrypt | encrypt_string | rekey |view ] [ options ] [vaultfile.yml]

07,ansible-console

   用户交互式工具

 

四,host

   ansible的配置主机配置文件默认在/etc/ansible/hosts

  

  在执行 的时候我们是可以指定文件读取的

    

  - i  参数或者 --inventory-file

  

 

   定义主机的内容配置

  1)直接为IP

    

  2)既可以有IP 也可以有hostname

    

  3)支持多台一起写

    

  4)可以是数据库

    

 

  inventroy  ssh 相关参数

    ansible_ssh_host:指定连接的主机 

    ansible_ssh_port:指定ssh连接端口

    ansible_ssh_user:指定ssh连接用户

    ansible_ssh_pass:指定ssh连接密码

    ansible_sudo_pass:指定连接的sudo密码

    ansible_ssh_private_key_file:指定特有的私钥文件

五,ansible正则

  1)匹配所有aLL

  ansible all  -m  ping

                -->两者是一样的表示所有主机

  ansible “*” -m ping

  ansible 10.0.0.* -m ping 

    扫描存活ip

     

 

  2) 逻辑或(or)

    ansible 中或使用  :  表示

    

  3)逻辑非(!)

    表示在这个组的但是不再另一个组的主机

  4)逻辑与(&)

    表示两个组同时存在的主机

   5)模糊匹配

    * 匹配0个或多个任意字符

   6)域切割

     python切割方式差不多

     【server】

       10.0.0.0 

         10.0.0.1

       10.0.0.1

      server[0] ==>10.0.0.0

      server[-1] ==>10.0.0.2

       server0:1] ==>10.0.0.0,10.0.0.1

      server[1:] ==>10.0.0.1,10.0.0.2

   7)正则

     对主机进行正则匹配

六,Ansible AD-Hoc命令集用法

    及命令行执行

   

  • -v,--verbose:输出更详细的执行过程信息,-vvv可得到执行过程所有信息。
  • -i PATH,--inventory=PATH:指定inventory信息,默认/etc/absible/hosts。
  • -f NUM,--forks=NUM:并发线程数,默认5个线程。
  • --private-key=PRIVATE_KEY_FILE:指定密钥文件。
  • -m NAME,--module-name=NAME:指定执行使用的模块。
  • -M DIRECTORY,--module-path=DIRECTORY:指定模块存放路径,默认/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设定默认路径。
  • -a 'ARGUMENTS',--args='ARGUMENTS':模块参数。
  • -k,--ask-pass SSH:认证密码。
  • -K,--ask-sudo-pass sudo:用户的密码(--sudo时使用)。
  • -o,--one-line:标准输出至一行。
  • -s,--sudo:相当于Linux系统下的sudo命令。
  • -t DIRECTORY,--tree=DIRECTORY:输出信息至DIRECTORY目录下,结果文件以远程主机名命名。
  • -T SECONDS,--timeout=SECONDS:指定连接远程主机的最大超时,单位是秒。
  • -B NUM,--background=NUM:后台执行命令,超NUM秒后中止正在执行的任务。
  • -P NUM,--poll=NUM:定期返回后台任务进度。
  • -u USERNAME,--user=USERNAME:指定远程主机以USERNAME运行命令。
  • -U SUDO_USERNAME,--sudo-user=SUDO_USERNAME:使用sudo,相当于Linux下的sudo命令。
  • -c CONNECTION,--connection=CONNECTION:指定连接方式,可用选项paramiko(SSH)、ssh、local,local方式常用于crontab和kickstarts。
  • -l SUBSET,--limit=SUBSET:指定运行主机。
  • -l ~REGEX,--limit=~REGEX:指定运行主机(正则)。
  • --list-hosts:列出符合条件的主机列表,不执行任何命令

ping 

   

hostname执行过程信息

  

  

  

 

 

ansible执行流程介绍

  

列出组的主机列表

 

 

 对10.0.0.71的服务器以root执行sleep20,设置最大连接超时时长为2S,设置为后台运行

执行没2s输出一次进度,5s未执行完则退出

 

 

通过命令查看系统设置

  

shell模块使用

  

 

 七,ansiable-doc

   ansible-doc  -l  查看能用的模块

   

  

  

 yum 实战:

   

  

  给一台主机安装一个软件

    

  查看命令是否成功

  

  显示的信息:

    changed :主机是否有变更,true为有,false 为没有,第一次安装一般都是ture 否则false

    msg:安装过程

    rc:0 结果返回码

 给负载均衡服务器安装nginx

  

 

  

 

  

 

  

 

linux  用户管理

  user模块介绍[转]

  

  

   

 ansible创建用户

  ansible server -m user -a "name=test shell=/bin/bash groups=root append=yes home=/home/test state=present"

  

修改属主:

  ansible server -m user -a "name=test groups=test append=no"

  

  

更改用户属性

  设置用户登入过期时间

  

  

删除用户

  ansible server -m user -a "name=test state=absent remove=yes"

  

  

  没有了

 更改用户密码

  

 

 下一期见。。。。。。

posted on 2018-08-20 12:00  kingle-l  阅读(1202)  评论(0编辑  收藏  举报

levels of contents