自动化运维对于互联网人越来越重要。上一篇介绍了一种自动化工具:制作自己个性的RPM包,从这期开始我将花费大量的篇幅来更新现在最火的一种自动化工具:ansible。这一篇先对ansible一些基本概念做个介绍,后面,我会主要是结合实际案例来介绍ansible的功能。
ansible概念:
1. ansible可以帮我们批量完成任务,或者需要完成一些经常重复的工作;
2. ansible不需要agent端,只需要在部署机上面部署ansible即可,通信机制是基于ssh通信;
3. ansible基于python语言编写,所以,里面的一些语法也和python语法很像。
4. ansible最重要的一点:具有幂等性。
ansible配置清单:
/etc/ansible/hosts:受控主机清单
/etc/ansible/ansible.cfg:ansible主配置文件
ansible模块的使用:
用以下命令查看ansible有哪些模块:
查看某个模块的使用方法:
command与shell模块:
两者的作用基本一样,但是shell模块比command功能强大,他支持管道,正则表达式等特殊字符;
example:
下一节单独将详细介绍其他模块的使用。
下面让大家看一个自己ansible的例子,有点复杂,写了将近一个半月(部署open stack):
[root@localhost ansible-openstack]# tree
.
├── ansible-2.5.2-1.el7.ans.noarch.rpm
├── ansible.cfg
├── ansible-openstack.txt
├── config.yml
├── facts
│ └── README
├── group_vars
│ ├── all
│ │ ├── 00_cross_roles.yml
│ │ ├── config.yml
│ │ └── default.yml
│ ├── compute
│ ├── ironic
│ ├── ironic_inspector
│ ├── mariadb
│ ├── mysql
│ ├── os_ha
│ └── proxy_ha
├── hosts
├── playbooks
│ ├── ceph_openstack_relatekey.yml
│ ├── ceph_rados_gateway_lvs_keepalived.yml
│ ├── ceph_rados_gateway.yml
│ ├── cinder_compute_install.yml
│ ├── cinder_controller_install.yml
│ ├── common-tasks
│ │ ├── binding_hosts.yml
│ │ ├── binding_lo_hosts.yml
│ │ ├── create_project_user_and_role.yml
│ │ ├── create_service_credentials_and_endpoints.yml
│ │ ├── mysql_db_user.yml
│ │ └── wait_for_port_on_host.yml
│ ├── compute_extension.retry
│ ├── compute_extension.yml
│ ├── dns.yml
│ ├── glance_install.yml
│ ├── haproxy_keepalived_install.yml
│ ├── haproxy_keepalived_os_install.yml
│ ├── haproxy_keepalived_proxy_install.yml
│ ├── ironic_inspector.yml
│ ├── ironic.yml
│ ├── keystone.yml
│ ├── mariadb_install.yml
│ ├── memcached_install.yml
│ ├── mysql_install.yml
│ ├── neutron_compute.yml
│ ├── neutron_controller_install.yml
│ ├── neutron_network.yml
│ ├── nova_compute.yml
│ ├── nova_controller.yml
│ ├── nova_novncproxy.yml
│ ├── nova_rabbit.yml
│ ├── ntp.yml
│ ├── openstack_compute.yml
│ ├── openstack_install.yml
│ ├── other_rabbit.yml
│ ├── rabbitmq.yml
│ ├── system_init.yml
│ └── vmware_compute.yml
├── README.md
├── roles
│ ├── bind
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ ├── config.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ ├── pre_install.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ ├── named.conf.j2
│ │ └── zone.j2
│ ├── ceph_rados_gateway
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ ├── config.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ └── realserver.sh.j2
│ ├── ceph_rados_gateway_lvs_keepalived
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ ├── config.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ ├── set_fact.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ ├── keepalived.conf_backup
│ │ └── keepalived.conf_master
│ ├── cinder_compute
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── site.yml
│ │ ├── tasks
│ │ │ ├── config.yml
│ │ │ ├── install.yml
│ │ │ ├── main.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ └── cinder.conf.j2
│ ├── cinder_controller
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── site.yml
│ │ ├── tasks
│ │ │ ├── auth.yml
│ │ │ ├── config.yml
│ │ │ ├── customize.yml
│ │ │ ├── db_sync.yml
│ │ │ ├── db.yml
│ │ │ ├── ha.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ └── cinder.conf.j2
│ ├── glance
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ ├── auth.yml
│ │ │ ├── config.yml
│ │ │ ├── db_sync.yml
│ │ │ ├── db.yml
│ │ │ ├── ha.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ ├── pre_install.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ └── glance-api.conf.j2
│ ├── haproxy_keepalived
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── files
│ │ │ ├── check_haproxy.sh
│ │ │ └── haproxy_vrrp_check.py
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── site.yml
│ │ ├── tasks
│ │ │ ├── config.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ ├── pre_install.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ ├── haproxy.cfg.j2
│ │ └── keepalived.conf.j2
│ ├── ironic
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── files
│ │ │ ├── httpd.conf
│ │ │ ├── neutron-server.service
│ │ │ ├── policy.json
│ │ │ ├── tftpboot_map-file
│ │ │ └── xinetdd_tftp
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ ├── auth.yml
│ │ │ ├── config_httpd.yml
│ │ │ ├── config_ipxe.yml
│ │ │ ├── config_neutron_compute.yml
│ │ │ ├── config_neutron_server.yml
│ │ │ ├── config_nova.yml
│ │ │ ├── config.yml
│ │ │ ├── customize.yml
│ │ │ ├── db_sync.yml
│ │ │ ├── db.yml
│ │ │ ├── ha_nova_serialproxy.yml
│ │ │ ├── ha.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ ├── start_httpd.yml
│ │ │ ├── start_nova.yml
│ │ │ ├── start_xinetd.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ ├── ironic.conf.j2
│ │ ├── ml2_conf_genericswitch.ini.j2
│ │ └── nova.conf.j2
│ ├── ironic_inspector
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── files
│ │ │ ├── map-file
│ │ │ └── tftp
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── site.yml
│ │ ├── tasks
│ │ │ ├── auth.yml
│ │ │ ├── config_dnsmasq.yml
│ │ │ ├── config_pxe.yml
│ │ │ ├── config.yml
│ │ │ ├── db_sync.yml
│ │ │ ├── db.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ ├── dnsmasq.conf.j2
│ │ ├── inspector.conf.j2
│ │ └── pxelinux.cfg.j2
│ ├── keystone
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── files
│ │ │ ├── mpm_prefork.conf
│ │ │ └── policy.json
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ ├── config_cluster.yml
│ │ │ ├── config_single.yml
│ │ │ ├── config.yml
│ │ │ ├── customize.yml
│ │ │ ├── db_sync.yml
│ │ │ ├── db.yml
│ │ │ ├── ha.yml
│ │ │ ├── httpd.yml
│ │ │ ├── init_fernet.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ └── pre_install.yml
│ │ └── templates
│ │ ├── keystone.conf.j2
│ │ ├── openrc.sh.j2
│ │ └── wsgi-keystone.conf.j2
│ ├── mariadb
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── files
│ │ │ ├── excluded_patterns.txt
│ │ │ ├── galera_new_cluster
│ │ │ ├── server_manager.sh
│ │ │ ├── system.conf
│ │ │ ├── week_report
│ │ │ └── week_report.tar.gz
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ ├── cluster_backup.yml
│ │ │ ├── cluster_init.yml
│ │ │ ├── cluster_monitor.yml
│ │ │ ├── config.yml
│ │ │ ├── data_init.yml
│ │ │ ├── ha.yml
│ │ │ ├── hostname.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ └── pre_install.yml
│ │ └── templates
│ │ ├── binlog_backup_node.sh.j2
│ │ ├── clustercheck.j2
│ │ ├── database_user_reinit.sh.j2
│ │ ├── db_user_rollback.sh.j2
│ │ ├── disk_uuid_mount.sh.j2
│ │ ├── fpmmm.conf.js.j2
│ │ ├── mariadbcheck.j2
│ │ ├── my.cnf.j2
│ │ ├── mysql_backup.sh.j2
│ │ ├── php.ini.j2
│ │ ├── rsync_tmbackup.sh.j2
│ │ ├── status_check.sh.j2
│ │ └── user_privage_check.py.j2
│ ├── memcached
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ ├── config.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ └── memcached.j2
│ ├── mysql
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── files
│ │ │ └── system.conf
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ ├── cluster_init.yml
│ │ │ ├── config.yml
│ │ │ ├── data_init.yml
│ │ │ ├── ha.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ ├── checkMySQL.py.j2
│ │ ├── database_user_reinit.sh.j2
│ │ ├── db_user_rollback.sh.j2
│ │ ├── disk_uuid_mount.sh.j2
│ │ ├── keepalived.conf.j2
│ │ ├── master_slave.sql.j2
│ │ ├── my.cnf.j2
│ │ ├── mysql.conf.j2
│ │ ├── mysql.service.j2
│ │ └── user_privage_check.py.j2
│ ├── neutron_compute
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── files
│ │ │ ├── dhcp_agent.ini
│ │ │ ├── dnsmasq-neutron.conf
│ │ │ └── nginx-namespace
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── site.yml
│ │ ├── tasks
│ │ │ ├── config.yml
│ │ │ ├── fwaas.yml
│ │ │ ├── install.yml
│ │ │ ├── main.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ ├── l3_agent_ini.j2
│ │ ├── metadata_agent_ini.j2
│ │ ├── ml2_conf_vmware_dvs.ini.j2
│ │ ├── neutron_conf.j2
│ │ ├── nginx.conf.j2
│ │ └── openvswitch_agent_ini.j2
│ ├── neutron_controller
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── site.yml
│ │ ├── tasks
│ │ │ ├── auth.yml
│ │ │ ├── config.yml
│ │ │ ├── customize.yml
│ │ │ ├── db_sync.yml
│ │ │ ├── db.yml
│ │ │ ├── fwaas.yml
│ │ │ ├── ha.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ ├── ml2_conf_ini.j2
│ │ └── neutron_conf.j2
│ ├── nova_compute
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── site.yml
│ │ ├── tasks
│ │ │ ├── config.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ ├── pre_install.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ ├── nova.conf.j2
│ │ └── secret.xml.j2
│ ├── nova_controller
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── files
│ │ │ └── policy.json
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ ├── auth.yml
│ │ │ ├── config.yml
│ │ │ ├── customize.yml
│ │ │ ├── db_sync.yml
│ │ │ ├── db.yml
│ │ │ ├── ha.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ ├── 00-nova-placement-api.conf.j2
│ │ └── nova.conf.j2
│ ├── nova_novncproxy
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ ├── config.yml
│ │ │ ├── ha.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ └── nova.conf.j2
│ ├── ntp
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── site.yml
│ │ ├── tasks
│ │ │ ├── config.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ └── ntp.conf.j2
│ ├── rabbitmq
│ │ ├── defaults
│ │ │ └── main.yml
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ ├── add_user.yml
│ │ │ ├── config.yml
│ │ │ ├── create_cluster.yml
│ │ │ ├── install.yml
│ │ │ ├── iptables.yml
│ │ │ ├── main.yml
│ │ │ ├── plugin.yml
│ │ │ ├── pre_install.yml
│ │ │ └── start.yml
│ │ └── templates
│ │ ├── rabbitmq.config.j2
│ │ └── rabbitmq-env.conf.j2
│ └── system_init
│ ├── defaults
│ │ └── main.yml
│ ├── files
│ │ ├── logrotate.conf
│ │ └── sshd_config
│ ├── handlers
│ │ └── main.yml
│ ├── tasks
│ │ ├── add_user.yml
│ │ ├── base.yml
│ │ ├── dns_config.yml
│ │ ├── history_config.yml
│ │ ├── hostname.yml
│ │ ├── install_package.yml
│ │ ├── iptables.yml
│ │ ├── limits_config.yml
│ │ ├── local_fact.yml
│ │ ├── logrotate.yml
│ │ ├── main.yml
│ │ ├── optimize_users_and_groups.yml
│ │ ├── reboot.yml
│ │ ├── repo_config.yml
│ │ ├── selinux_disable.yml
│ │ ├── sshd_config.yml
│ │ └── sysctl_config.yml
│ └── templates
│ ├── cty.repo
│ ├── interfaces.fact.j2
│ ├── resolv.conf.j2
│ └── vcpu.fact.j2
└── tmp
├── ceph.client.cinder-backup.keyring
├── ceph.client.cinder.keyring
├── ceph.client.glance.keyring
├── ceph.conf
├── client.cinder.key
└── README