Ansible主要配置文件介绍

修改配置文件放置位置

# export ANSIBLE_CONFIG=/root/test.cfg

ansible的配置文件
/etc/ansible/
ansible.cfg:ansible执行需求的全局性、默认的配置文件

ansible的配置文件读取的优先级:
ANSIBLE_CONFIG
./ansible.cfg
~/ansible.cfg
/etc/ansible/ansible.cfg

hosts:默认的主机资产清单文件

mkdir -p /etc/ansible

cat <<eof>/etc/ansible/ansible.cfg

 

[defaults]
inventory=/tmp/hosts
[ssh_connection]
ssh_args=-o StrictHostKeyChecking=no

eof

export ANSIBLE_CONFIG=/etc/ansible/ansible.cfg

ansible --version

ansible 2.7.3
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible-2.7.3-py2.7.egg/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]

cat <<eof>/tmp/hosts
 [ test]
192.168.253.133 ansible_ssh_user=root ansible_ssh_pass='rss123'
eof

ansible test --list-host
hosts (1):
192.168.253.133

ansible配置文件的讲解:

1)inventory该参数表示资源清单inventory文件的位置,资源清单就是一些Ansible需要连接管理的主机列表inventory=/root/ansible/hosts*
2)library Ansible的操作动作,无论是本地或远程,都使用一小段代码来执行,这小段代码称为模块,这个libbrary library=/usr/share/ansible
3)forks设置默认情况下Ansible最多能有多少个进程同时工作,默认设置最多5个进程并行处理。forks=5

4)sudo_user这是设置默认执行命令的用户,也可以在playbook中重新设置这个参数sudo_user=root

5)remote_port这是指定连接被关节点的管理端口,默认是22,除非设置了特殊的SSH端口,remote_port=22

6)host_key_checking这是设置是否检查SSH主机的密钥。可以设置为True或False host_key_checking=False
7)timeout这是设置SSH连接的超时间隔,单位是秒。
timeout=20
8)log_path Ansible系统默认是不记录日志的,如果想把Ansible系统的输出记1og_path=/var/log/ansible.log、

9)private_key_file在使用ssh公钥私钥登录系统时候,使用的密钥路径。

http://docs.ansible.com/ansible/latest/intro_configuration.html#private-key-file

(五)hosts配置文件
1、配置方式

[group_name]
192.168.1.11:22 ansible_ssh_user=root ansible_ssh_pass='123123'
ssh用户+ssh密码

[group_name]
192.168.1.12:22 ansible_ssh user=root ansible_ssh_private_key_file=idrsapath
ssh用户+ssh密钥

[group_name]
test1 ansible_ssh host=192.168.1.13 ansible_ssh_port=22
ansible_ssh_user=root ansible_ssh_private_key_file=/home/ssh_keys/id_rsa
别名+ssh用户+ssh密钥


2、简单查看方式

ansible all --list-hosts

ansible test_group --list-hosts
3、区别主机别名和IP的配置方式

场景一、密码登录
1)安装ssh_pass包
apt-get install sshpass yum install sshpass
https://gist.github.com/arunoda/7790979
2)ansible配置文件

ansible.cfg

[defaults]
inventory=/tmp/hosts

forks=5
default_sudo_user=root
remote_port=22
host_key_checking=False
timeout=20

log_path=/var/log/ansible.log
#private_key_file=/tmp/file.pem

3)执行测试、

ansible all -a 'ls /tmp'

场景二、密钥登录
1)生成并配置ssh公钥、私钥

ssh-keygen

ssh-copy -id 192.168.1.110


2)ansible配置文件

[test _group1]
192.168.1.110:22 ansible_ssh_user=root ansible_ssh_key_file=/root/.ssh/id_rsa

三、ansible的ad-hoc模式
(一)什么是ad-hoc模式
(二)ad-hoc模式使用的场景
(三)ad-hoc模式的命令使用
(四)ad-hoc模式常用模块
(五)场景演示

ad-hoc简而言之,就是“临时命令”
ansible中有两种模式,分别是ad-hoc模式和playbook模式

(二)ad-hoc模式使用的场景场景

(三)ad-hoc模式的命令使用
ansible<host-pattern>[options]

options:包括执行的模块和执行命令参数

ansible命令的参数,如下:
-v --verbose:输出更详细的执行过程信息,-vwv可得到所有执行过程信息。
-i PATH,--inventory=PATH:指定inventory信息,默认/etc/ansible/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秒后kill正在执行的任务。
-P NUM,--poll=NUM:定期返回后台任务进度。
-u USERNAME,--user=USERNAME:指定远程主机以USERNAME运行命令。
-U SUDO_USERNAME,--sudo-user=SUDO_USERNAM:E使用sudo,相当于Linux下的sudo命令。
-c CONNECTION,--connection=CONNECTION:指定连接方式,可用选项paramiko
(SSH),ssh,local。Local方式常用于crontab和kickstarts。
-I SUBSET,--limit=SUBSET:指定运行主机。
-l ~REGEX,--limit=~REGEX:指定运行主机(正则)。
--list-hosts:列出符合条件的主机列表,不执行任何其他命令

一、在多台机器上,查看某个进程是否启动场景

二、在多台机器上,拷贝指定日志文件到本地

模块名        作用      用例
command       默认模块     ansible webservers -a "/sbin/reboot" -f 10
shell         执行shell命令  ansible test -m shell -a "echo $HOSTNAME"
file transfer      文件传输    ansible test -m copy -a "src=/etc/hosts dest=/tmp/hosts"
managing packages  管理软件包   ansible test -m yum -a "name=nginx state=present"#注:present表示有的话就不装,没有的话就装
user and groups    用户和组    ansible test -m user -a "name=jeson  password=123456"

Deploying       部署模块     ansible test -m git -a "repo=https://github.com/iopsgroup/imoocc dest=/opt/iops version=HEAD"
managing service    服务管理     ansible test -m service -a "name=nginx services state=started"
Background operation 后台运行     ansible test -B 3600 -a "/usr/bin/running_operations --do-stuff"

gathering       搜集系统信息   ansible test -m setup

ansible test_group -m shell -a "echo $HOSTNAME" -f 5

ansible test_group -m copy -a "src=/etc/hosts dest=/tmp" -f 5 -l 192.168.1.101

ansible test_group -m yum -a "name=nginx state=present" -f 5 -l 192.168.1.110
ansible test_group -m service -a "name=nginx state=start" -f 5 -l 192.168.1.110

playbook的组成
play:定义的是主机的角色
task:定义的是具体执行的任务
playbook:由一个或多个play组成,一个play可以包含多个task

playbook的优势
1、功能比adhoc更全
2、控制好依赖
3、展现更直观
4、持久使用

 二、playbook的配置语法

(一)基本使用
1、playbook基础使用

ansible-playbook playbook.yml [ options]

-U REMOTE_USER,--user=REMOTE_USER
#ssh连接的用户名
-k,--ask-pass
#ssh登录认证密码
-s,--sudo
#sudo 到root用户,相当于Linux系统下的sudo命令
-U SUDO_USER,--sudo-user=SUDO_USER
#sudo到对应的用户
-K,--ask-sudo-pass
#用户的密码(-sudo时使用)
-T TIMEOUT,--timeout=TIMEOUT
#ssh连接超时,默认10秒
-C,--check
#指定该参数后,执行playbook文件不会真正去执行,而是模拟执行一遍,然后输出本次执行会对远程主机造成的修改
-e EXTRA_VARS,--extra-Vars=EXTRA_VARS
#设置额外的变量如:key=value形式或者YAML orJ50N,以空格分隔变量,或用多个-e
-f FORKS,--fOrkS=FORKS
#进程并发处理,默认5
-i INVENTORY,--inventory-file=INVENTORY
#指定hosts 文件路径,默认default=/etc/ansible/hosts
-1 SUBSET,--limit=SUBSET
#指定一个 pattern,对-hosts:匹配到的主机再过滤一次
--list-hosts

#只打印有哪些主机会执行这个playbook文件,不是实际执行该playbook

--list-tasks
#列出该playbook 中会被执行的task
--private-key=PRIVATE_KEY_FILE
#私钥路径
--step
#同一时间只执行一个task,每个task 执行前都会提示确认一遍
--syntax-check
#只检测playbook 文件语法是否有问题,不会执行该playbook
-t TAGS,--tags=TAGS
#当play和task的tag为该参数指定的值时才执行,多个tag 以逗号分隔
--skip-tags=SKIP_TAGS
#当play和task的tag不匹配该参数指定的值时,才执行
-V,--verbose


2、使用场景

(1)playbook的配置

---
-hosts:192.168.1.101
remote_user: root
vars:
touch_flile: imoocc. file
tasks:
-name: touch file
shell:"touch /tmp/{{ touch_flilel}}"


(2)执行

ansible-playbook -i /tmp/hosts --list-hosts./fl.yml
ansible-playbook./fl.yml

ansible-playbook ./f1.yml --extra-vars "touch_file=jeson2"


(3)执行结果返回

红色:表示有task执行失败或者提醒的信息
黄色:表示执行了且改变了远程主机状态
绿色:表示执行成功

(二)yaml语法和变量

1、yaml语法
大小写敏感
使用缩进表示层级关系(只能空格不能使用tab)
yaml文件以“---“作为文档的开始

2、支持的数据结构
字典 列表 纯量:数字、布尔、字符串
{name:jeson}
-Apple
-Orange
-Strawberry
-Mango

3、yaml变量的应用
myname:jeson
name:{{myname}}"

ansible-playbook -i /tmp/hosts --list-hosts ./f1.yml

4、playbook里的变量
(1)playbook的yaml文件中定义变量赋值
(2)-extra-vars执行参数赋给变量
(3)在文件中定义变量

cat /tmp/hosts

[test_group1:children]
test_group2
test_group3
[test_group2:vars]
touch_file=jeso

(4)注册变量

register 关键字可以存储指定命令的输出结果到一个自定义的变量中
-name:get time
command:date
register:date_output

(三)基本语句

ansible-playbook ./f4.yml -vvv

---
-hosts:192.168.1.101
remote_user:root
vars:
touch_file:imoocc.file
tasks:
-name:get date
command:date
register:date_output
- name:touch file
shel1:"touch/tmp/imoocc.file"
-name:echo date_output
shel1:"echo {{date_output.stdout}}>/tmp/{{touch_file}}"

 

2、循环语句
循环类型关键字
|标准循环withitems
嵌套循环with nested
遍历字要with dict
并行遍历列表with together
遍历列表和索引withindexed_items
遍历文件列表的内容with_file
遍历目录文件with fileglob
重试循环until
查找第一个匹配文件with_first found
随机选择with_random_choice
在序列中循环with_sequence


(四)异常处理和相关操作

猜你喜欢

转载自www.cnblogs.com/xiaomabrother/p/12606038.html
今日推荐