- file: path=/etc/foo.conf mode=0644
- file: path=/etc/foo.conf mode=0644
- file: "path=/etc/foo.conf mode=0644"
- file: path: /etc/foo.conf mode: 0644
- file: path: "{{ my_path }}" owner: "foo" group: "bar" mode: "0644"
- copy:dest: "{{ my_path }}"
content: " Some very long line which needs to be wrapped"
- copy: dest: "{{ my_path }}" content: "First\nSecond\n"
- file: path: "{{ my_path }}" owner: foo group: bar mode: 0644
- copy:dest: "{{ my_path }}"
content: >2- Some very long line which needs to be wrapped
- copy:dest: "{{ my_path }}"
content: | First Second
● - { } [ ] * & ? | > ! % ` # @ :
- file: path: "{{ my_path }}" mode: 0644
●- debug: msg: "Path: {{ my_path }}"
● yes false
- copy: dest: "{{ my_path }}" content: "yes"
● yamllint
ansible all -i localhost, --connection local -m debug -a 'msg={{xxx}}' -e '{xxx: @asd}'
- file: path: "{{ my_path }}" owner: foo group: bar mode: 0644
- hosts: all vars: data: aaa: bbb ccc: - ddd: - eee
# Half tabs (4 spaces)- file: path: "{{ my_path }}" owner: foo group: bar mode: 0644
# Inconsistent indentation- hosts: all vars: data: aaa: bbb ccc: - ddd: - eee
# roles/role1/defaults/main.yamlvar1: aaa
# roles/role2/defaults/main.yamlvar1: bbb
# group_vars/allvar1: ccc
# role1/defaults/main.yamlrole1_var1: aaa
# role2/defaults/main.yamlrole2_var1: bbb
# group_vars/allrole2_var1: ccc
# roles/role1/defaults/main.yamlrole1_var1: aaa
# roles/role1/tasks/main.yaml- debug: msg: > var1={{ role1_var1 }}, var2={{ role1_var2 }}
# group_vars/allrole1_var2: bbb
# roles/role1/defaults/main.yamlrole1_var1: aaa# Must be defined by the userrole1_var2: null
# roles/role1/tasks/main.yaml- debug: msg: > var1={{ role1_var1 }}, var2={{ role1_var2 }}
# group_vars/allrole1_var2: bbb
# roles/role1/defaults/main.yamlrole1_var1: aaa
# roles/role1/vars/main.yamlrole1_var2: bbb
# roles/role1/tasks/main.yaml- debug: msg: > var1={{ role1_var1 }}, var2={{ role1_var2 }}
# roles/role1/defaults/main.yamlrole1_var1: aaarole1_var2: bbb
# roles/role1/tasks/main.yaml- debug: msg: > var1={{ role1_var1 }}, var2={{ role1_var2 }}
● vars defaults
# roles/role1/meta/main.yamldependencies: - role2
# roles/role1/vars/main.yamlrole1_var1: bbb
# roles/role2/defaults/main.yamlrole1_var1: aaa
●○○
- file: path: /etc/foo.conf mode: 0644
- name: Set foo.conf mode file: path: /etc/foo.conf mode: 0644
- cron: name: Run my command job: /usr/bin/my_prog minute: "*" hour: "*" state: present
- cron: name: Run my command job: /usr/bin/my_prog
- cron: name: Run my command minute: "{{ minute }}" hour: "{{ hour }}" job: /usr/bin/my_prog
- package: name: mysql-server
- template: src: my.cnf.j2 dest: /etc/my.cnf
- service: name: mysql enabled: yes state: started
- package: name: mysql-server tags: - mysql_pkg
- template: src: my.cnf.j2 dest: /etc/my.cnf tags: - mysql_config
- service: name: mysql enabled: yes state: started tags: - mysql_service
# roles/mysql/tasks/main.yaml- package: name: "{{ mysql_pkg }}" notify: Restart MySQL service tags: mysql_pkg
- template: src: my.cnf.j2 dest: "{{ mysql_config_path }}" notify: Restart MySQL service tags: mysql_config
- service: name: "{{ mysql_service }}" enabled: yes tags: mysql_service
- service: name: "{{ mysql_service }}" state: started register: mysql_service_started tags: mysql_service
# roles/mysql/handlers/main.yaml- name: Restart MySQL service service: name: "{{ mysql_service }}" state: restarted when: > mysql_service_started is not defined or not mysql_service_started.changed
# roles/mysql/defaults/main.yamlmysql_pkg: mysql-servermysql_config_path: /etc/my.cnfmysql_service: mysql
- lineinfile: path: /etc/selinux/config regexp: ^SELINUX= line: SELINUX=enforcing
- template: src: selinux_config.j2 dest: /etc/selinux/config
# Desired config file (myapp.cfg):[section1]option11=value11option12=value12
# myapp_role/templates/myapp.cfg.j2:{{ myapp_config | encode_ini }}
# myapp_role/defaults/main.yaml:myapp_config: section1: option11: value11 option12: value12
# myapp_role/tasks/main.yaml:- name: Create config file template: dest: /etc/myapp/ myapp.cfg src: myapp.cfg.j2
# myapp_role/defaults/main.yaml:
myapp_section1_option11: value1myapp_section1_option12: value2
myapp_section1__default: option11: "{{ myapp_section1_option11 }}" option12: "{{ myapp_section1_option12 }}"
myapp_section1__custom: []
myapp_section1: "{{ myapp_section1__default.update(myapp_section1__custom)}}{{ myapp_section1__default}}"
myapp_config__default: section1: "{{ myapp_section1 }}"
myapp_config__custom: {}
myapp_config: "{{ myapp_config__default.update(myapp_config__custom) }}{{ myapp_config__default }}"
# Desired config file (/etc/selinux/config):SELINUX=enforcingSELINUXTYPE=targeted
# roles/sudo/templates/selinux_config.j2:{{ ansible_managed | comment }}{{ selinux_config | encode_ini(ucase_prop=true) }}
# roles/selinux/defaults/main.yaml:selinux_config: selinux: enforcing selinuxtype: targeted
# roles/selinux/tasks/main.yaml:- name: Create config file template: dest: /etc/selinux/config src: selinux_config.j2
git clone https://github.com/jtyr/vagrantfile_config.git /tmp/vagrantfile_configmkdir -p /tmp/test/roles && cd /tmp/testgit clone https://github.com/jtyr/ansible-nginx.git roles/nginxgit clone https://github.com/jtyr/ansible-config_encoder_filters.git roles/config_encoder_filtersln -s /tmp/vagrantfile_config/Vagrantfile ./cat > vagrant.yaml <<END---defaults: provision_individual: yesvms: testvm1: ports: HTTP: host: 8080 guest: 80ENDcat > site.yaml <<END---- hosts: all become: yes roles: - nginxENDvagrant upvagrant provisionansible-playbook -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory site.yamlvagrant sshssh -p 10000 -i .vagrant/machines/test/virtualbox/private_key -l vagrant localhostvagrant destroy -f