production # inventory file for production servers
staging # inventory file for staging environment
group_vars/
group1.yml # here we assign variables to particular groups
group2.yml
host_vars/
hostname1.yml # here we assign variables to particular systems
hostname2.yml
library/ # if any custom modules, put them here (optional)
module_utils/ # if any custom module_utils to support modules, put them here (optional)
filter_plugins/ # if any custom filter plugins, put them here (optional)
site.yml # master playbook
webservers.yml # playbook for webserver tier
dbservers.yml # playbook for dbserver tier
roles/
common/ # this hierarchy represents a "role"
tasks/ #
main.yml # <-- tasks file can include smaller files if warranted
handlers/ #
main.yml # <-- handlers file
templates/ # <-- files for use with the template resource
ntp.conf.j2 # <------- templates end in .j2
files/ #
bar.txt # <-- files for use with the copy resource
foo.sh # <-- script files for use with the script resource
vars/ #
main.yml # <-- variables associated with this role
defaults/ #
main.yml # <-- default lower priority variables for this role
meta/ #
main.yml # <-- role dependencies
library/ # roles can also include custom modules
module_utils/ # roles can also include custom module_utils
lookup_plugins/ # or other types of plugins, like lookup in this case
webtier/ # same kind of structure as "common" was above, done for the webtier role
monitoring/ # ""
fooapp/ # ""
inventories/
production/
hosts # inventory file for production servers
group_vars/
group1.yml # here we assign variables to particular groups
group2.yml
host_vars/
hostname1.yml # here we assign variables to particular systems
hostname2.yml
staging/
hosts # inventory file for staging environment
group_vars/
group1.yml # here we assign variables to particular groups
group2.yml
host_vars/
stagehost1.yml # here we assign variables to particular systems
stagehost2.yml
library/
module_utils/
filter_plugins/
site.yml
webservers.yml
dbservers.yml
roles/
common/
webtier/
monitoring/
fooapp/
# find system serial# --module-name or -m --args or -aansible localhost --module-name setup --args 'filter=ansible_product_serial'# list groupsansible localhost -m debug -a 'var=groups'# list groups keysansible localhost -m debug -a 'var=groups.keys()'# list groups(or this command)ansible-inventory -i inventory/prod.yml --list
hello world
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
----name:This is a hello-world examplehosts:localhostgather_facts:notasks:-set_fact:hello:'hello world'-name:Create a file called '/tmp/testfile.txt' with the content 'hello world'.copy:# get variable from hostvarscontent:'{{ hostvars[inventory_hostname]["hello"] }}'dest:/tmp/testfile.txt
----name:This is a hello-world examplehosts:localhostvars:device_by_pci_address:"{{
ansible_facts | json_query('@.* | [?pciid].{key: pciid, value: device}') | items2dict
}}"tasks:-name:To set some variables to hostvarsset_fact:classmates:-sex:'male'name:'AA'age:15-sex:'female'name:'BB'age:16-sex:'male'name:'CC'-sex:'female'name:'DD'-sex:'male'name:'lo'-sex:'female'name:'enp0s3'pci_bus_addr2nic:"{{ ansible_facts | json_query('@.* | [?pciid].{key: pciid, value: device}') | items2dict }}"-name:Get system serialbecome:trueshell:cat /sys/devices/virtual/dmi/id/product_serialregister:system_serial-name:To create a test filefile:path:/tmp/testfile.txtstate:touchowner:rootgroup:rootmode:0777-name:To append some lines to the test filelineinfile:# test: get the mac address of a nicline:'{{ item.name }}: {{ item.sex }} ==> {{ ansible_facts[item.name].macaddress }} 'dest:/tmp/testfile.txtloop:'{{ hostvars[inventory_hostname]["classmates"] }}'when:inventory_hostname not in ['host1', 'host2'] and item.name in ['enp0s3']-name:To add a block to a fileblockinfile:dest:/tmp/testfile.txtblock:| hello world
Java is the best.
system_serial.stdout: {{ system_serial.stdout }}
{{ hostvars[inventory_hostname].system_serial.stdout }}
#########
pci_bus_addr2nic: {{ pci_bus_addr2nic }}
{{ hostvars[inventory_hostname]["pci_bus_addr2nic"] }}
###########
device_by_pci_address: {{ device_by_pci_address }}
Must not Get from this way: hostvars[inventory_hostname]["device_by_pci_address"]-debug:var:pci_bus_addr2nic-debug:var:device_by_pci_address-debug:# this variable is from ansible_facts# you can get some info by this command (ansible localhost --module-name setup --args 'filter=ansible_product_serial')var:ansible_product_serial-debug:var:system_serial.stdout
---# https://medium.com/bigpanda-engineering/using-ansible-to-compile-nginx-from-sources-with-custom-modules-f6e6c6a42493-name:Start service httpd, if not startedservice:name:httpdstate:started----name:Stop service httpdservice:name:httpdstate:stopped----name:Restart network service for interface eth0service:name:networkstate:restartedargs:enp2s0