ML
    • Recent
    • Categories
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Using Ansible to Manage install and update Apple OSX DHCP clients

    IT Discussion
    osx ansible homebrew apple automation
    5
    100
    8.0k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • stacksofplatesS
      stacksofplates
      last edited by

      Ok I'm eating dinner and I'll make a post afterwards.

      1 Reply Last reply Reply Quote 0
      • stacksofplatesS
        stacksofplates
        last edited by stacksofplates

        Ok. I made a skeleton repo for you here. This is how I set up all of my playbooks. I use a single repo for most of my playbooks and then the roles have their own repositories (because they're called in with Galaxy). I never use the /etc/ansible directory because of permissions issues and it's not portable. You can take this one step further and use a virtualenv but that's for later after you get this working.

        It will be easiest if you fork this and have your own. Clone your copy locally and then put your playbook(s) in the top level folder of the repository. In the inventory directory, add a file called macs or whatever your group is called, but still add the group name in the file like you would normally. It's just a nice way to be able to separate things out logically so you can see them easier. Also add any group_vars if you have them.

        Add your role to the roles/requirements.yml file. Once you've added all of your files to your repo, commit your changes. Then run make roles. It will remove any roles you've installed, and then reinstall them. Now you should be ready to run the playbook.

        You can also run make clean and it will reset your repository to the latest commit. So if you want to keep the work make sure to commit.

        1 Reply Last reply Reply Quote 2
        • DustinB3403D
          DustinB3403
          last edited by DustinB3403

          Okay so this is my existing tree.

          /etc/ansible/
          ├── ansible.cfg
          ├── apple.yml
          ├── clients
          ├── default.config.yml
          ├── hosts
          ├── main.yml
          ├── playbook-skeleton
          │   ├── ansible.cfg
          │   ├── group_vars
          │   │   └── README
          │   ├── inventory
          │   │   ├── apple_workstations
          │   │   └── dev
          │   ├── library
          │   │   └── README
          │   ├── Makefile
          │   └── roles
          │       └── requirements.yml
          ├── requirements.yml
          ├── roles
          │   ├── ansible-role-homebrew
          │   │   ├── defaults
          │   │   │   └── main.yml
          │   │   ├── handlers
          │   │   │   └── main.yml
          │   │   ├── LICENSE
          │   │   ├── meta
          │   │   │   └── main.yml
          │   │   ├── README.md
          │   │   ├── requirements.yml
          │   │   ├── tasks
          │   │   │   ├── main.yml
          │   │   │   └── playbook.yml
          │   │   └── tests
          │   │       ├── local-testing
          │   │       │   ├── playbook.yml
          │   │       │   └── README.md
          │   │       └── test.yml
          │   ├── elliotweiser.osx-command-line-tools
          │   │   ├── ansible.cfg
          │   │   ├── CONTRIBUTING.md
          │   │   ├── defaults
          │   │   │   └── main.yml
          │   │   ├── handlers
          │   │   │   └── main.yml
          │   │   ├── LICENSE
          │   │   ├── meta
          │   │   │   └── main.yml
          │   │   ├── molecule
          │   │   │   ├── default
          │   │   │   │   ├── create.yml
          │   │   │   │   ├── destroy.yml
          │   │   │   │   ├── molecule.yml
          │   │   │   │   └── prepare.yml
          │   │   │   ├── elcapitan.sh
          │   │   │   ├── highsierra.sh
          │   │   │   ├── mojave.sh
          │   │   │   ├── sierra.sh
          │   │   │   ├── unset.sh
          │   │   │   └── yosemite.sh
          │   │   ├── README.md
          │   │   ├── tasks
          │   │   │   └── main.yml
          │   │   ├── tests
          │   │   │   ├── inventory
          │   │   │   ├── playbook.yml
          │   │   │   ├── test_default.py
          │   │   │   ├── test-requirements.txt
          │   │   │   └── version_check.py
          │   │   └── vars
          │   │       └── main.yml
          │   └── geerlingguy.homebrew
          │       ├── defaults
          │       │   └── main.yml
          │       ├── handlers
          │       │   └── main.yml
          │       ├── LICENSE
          │       ├── meta
          │       │   └── main.yml
          │       ├── README.md
          │       ├── requirements.yml
          │       ├── tasks
          │       │   ├── main.yml
          │       │   └── playbook.yml
          │       └── tests
          │           ├── local-testing
          │           │   ├── playbook.yml
          │           │   └── README.md
          │           └── test.yml
          └── ssh.sh
          
          29 directories, 61 files
          

          The make command wasn't found so I installed make. Running make roles from within the /etc/ansible/playbook-skeleton I got

          make roles
          git clean -fdx roles
          ansible-galaxy install -r roles/requirements.yml
          - extracting ansible-role-homebrew to /etc/ansible/playbook-skeleton/roles/ansible-role-homebrew
          - ansible-role-homebrew was installed successfully
          - adding dependency: elliotweiser.osx-command-line-tools
          - downloading role 'osx-command-line-tools', owned by elliotweiser
          - downloading role from https://github.com/elliotweiser/ansible-osx-command-line-tools/archive/2.2.1.tar.gz
          - extracting elliotweiser.osx-command-line-tools to /etc/ansible/playbook-skeleton/roles/elliotweiser.osx-command-line-tools
          - elliotweiser.osx-command-line-tools (2.2.1) was installed successfully
          
          stacksofplatesS 1 Reply Last reply Reply Quote 1
          • stacksofplatesS
            stacksofplates @DustinB3403
            last edited by stacksofplates

            @DustinB3403 said in Using Ansible to Manage install and update Apple OSX DHCP clients:

            Okay so this is my existing tree.

            The make command wasn't found so I installed make. Running make roles from within the /etc/ansible/playbook-skeleton I got

            make roles
            git clean -fdx roles
            ansible-galaxy install -r roles/requirements.yml

            • extracting ansible-role-homebrew to /etc/ansible/playbook-skeleton/roles/ansible-role-homebrew
            • ansible-role-homebrew was installed successfully
            • adding dependency: elliotweiser.osx-command-line-tools
            • downloading role 'osx-command-line-tools', owned by elliotweiser
            • downloading role from https://github.com/elliotweiser/ansible-osx-command-line-tools/archive/2.2.1.tar.gz
            • extracting elliotweiser.osx-command-line-tools to /etc/ansible/playbook-skeleton/roles/elliotweiser.osx-command-line-tools
            • elliotweiser.osx-command-line-tools (2.2.1) was installed successfully

            I think your missing my point. Don't use /etc/ansible.

            Clone the repo somewhere in your home directory that you store your projects and run everything from there.

            1 Reply Last reply Reply Quote 0
            • DustinB3403D
              DustinB3403
              last edited by

              @stacksofplates eh. . .

              Can I just use mv at this point?

              stacksofplatesS 1 Reply Last reply Reply Quote 0
              • stacksofplatesS
                stacksofplates @DustinB3403
                last edited by

                @DustinB3403 said in Using Ansible to Manage install and update Apple OSX DHCP clients:

                @stacksofplates eh. . .

                Can I just use mv at this point?

                I mean you can but that's the reason this is all in a repo, so you can just check it out anywhere.

                1 Reply Last reply Reply Quote 0
                • stacksofplatesS
                  stacksofplates
                  last edited by

                  Plus your tree doesn't have the inventory directory which the ansible.cfg file is looking for.

                  DustinB3403D 1 Reply Last reply Reply Quote 0
                  • DustinB3403D
                    DustinB3403 @stacksofplates
                    last edited by

                    @stacksofplates said in Using Ansible to Manage install and update Apple OSX DHCP clients:

                    Plus your tree doesn't have the inventory directory which the ansible.cfg file is looking for.

                    pwd
                    /home/ansi/playbook-skeleton
                    # tree
                    .
                    ├── ansible.cfg
                    ├── group_vars
                    │   └── README
                    ├── inventory
                    │   ├── apple_workstations
                    │   └── dev
                    ├── library
                    │   └── README
                    ├── Makefile
                    └── roles
                    	└── requirements.yml
                    
                    4 directories, 7 files
                    
                    1 Reply Last reply Reply Quote 0
                    • DustinB3403D
                      DustinB3403
                      last edited by

                      Hopefully that's better?

                      stacksofplatesS 1 Reply Last reply Reply Quote 0
                      • stacksofplatesS
                        stacksofplates @DustinB3403
                        last edited by

                        @DustinB3403 said in Using Ansible to Manage install and update Apple OSX DHCP clients:

                        Hopefully that's better?

                        Yeah. I mean I'm not trying to make you do it certain way, but if you want to use that skeleton, it's looking for things in a certain directory unless you modify it.

                        1 Reply Last reply Reply Quote 0
                        • stacksofplatesS
                          stacksofplates
                          last edited by

                          So I'd put your playbook in /etc/ansi/playbook-skeleton and then you can run make roles to install the role (after you add it to the requirements.yml of course).

                          DustinB3403D 1 Reply Last reply Reply Quote 0
                          • DustinB3403D
                            DustinB3403 @stacksofplates
                            last edited by

                            @stacksofplates said in Using Ansible to Manage install and update Apple OSX DHCP clients:

                            So I'd put your playbook in /etc/ansi/playbook-skeleton and then you can run make roles to install the role (after you add it to the requirements.yml of course).

                            okay so everything is in

                            /home/ansi/playbook-skeleton

                            With that, I need to make a playbook to do brew stuff, right?

                            Any pointers on where to go?

                            stacksofplatesS 1 Reply Last reply Reply Quote 0
                            • stacksofplatesS
                              stacksofplates @DustinB3403
                              last edited by

                              @DustinB3403 said in Using Ansible to Manage install and update Apple OSX DHCP clients:

                              @stacksofplates said in Using Ansible to Manage install and update Apple OSX DHCP clients:

                              So I'd put your playbook in /etc/ansi/playbook-skeleton and then you can run make roles to install the role (after you add it to the requirements.yml of course).

                              okay so everything is in

                              /home/ansi/playbook-skeleton

                              With that, I need to make a playbook to do brew stuff, right?

                              Any pointers on where to go?

                              What was in your apple.yml playbook?

                              DustinB3403D 1 Reply Last reply Reply Quote 0
                              • DustinB3403D
                                DustinB3403 @stacksofplates
                                last edited by

                                @stacksofplates Nothing now, I blew it all away.

                                stacksofplatesS 1 Reply Last reply Reply Quote 0
                                • stacksofplatesS
                                  stacksofplates @DustinB3403
                                  last edited by

                                  @DustinB3403 said in Using Ansible to Manage install and update Apple OSX DHCP clients:

                                  @stacksofplates Nothing now, I blew it all away.

                                  Ok. So here https://docs.ansible.com/ansible/latest/user_guide/playbooks.html has pretty much everything you could want, but for a short start here's what I would do:

                                  ---
                                  - name: Set up Macs
                                    hosts: apple_workstations
                                    user: dustin
                                    become: true
                                  
                                    tasks:
                                      - include_role:
                                          name: role-name
                                  

                                  That should be a good simple start. You can pass any variables to the role by doing this:

                                  tasks:
                                    - include_role:
                                        name: role-name
                                      vars: 
                                        key: value
                                  
                                  1 Reply Last reply Reply Quote 2
                                  • stacksofplatesS
                                    stacksofplates
                                    last edited by

                                    This is a good starter video:

                                    Youtube Video

                                    1 Reply Last reply Reply Quote 1
                                    • 1
                                    • 2
                                    • 3
                                    • 4
                                    • 5
                                    • 5 / 5
                                    • First post
                                      Last post